Genel Bakış
CommandBars (CommandBars collection), Excel'deki yerleşik ve özel komut çubuklarının tamamını içeren koleksiyondur; sağ tık (kısayol) menüleri, eski tip araç çubukları ve açılır menüler bu koleksiyon üzerinden yönetilir. Application.CommandBars ifadesiyle ulaşılır ve çubuk ekleme, düğme ekleme, düğmeye makro bağlama, çubukları gizleme ya da eski durumuna döndürme işlerinde kullanılır.
Makro çalışınca oluşturulan çubuğun adı RaporMenu, içindeki denetim sayısı 3 olarak yazılır. İlk düğmenin başlığı Aylık Rapor, son düğmenin başlığı Yazdırma Önizleme değerindedir. Çubuk Temporary olarak açıldığı ve sonunda Delete ile silindiği için Excel'de kalıcı bir iz bırakmaz.
Cell çubuğunun tür kodu 2, Row çubuğunun 2, Column çubuğunun 2 olarak okunur; üçü de açılır menü türündedir. Denetim var mı sütununda DOĞRU, DOĞRU ve DOĞRU değerleri görülür; yani bu sağ tık menülerinin içinde komutlar bulunur. Başvuruda ad olarak Excel'in İngilizce iç adları kullanılır.
Düğme eklendikten sonra denetim sayısı 1 artar ve eklenen düğmenin başlığı Raporu Yenile olur. Düğme Delete ile silindikten sonra fark 0 değerine döner, yani sağ tık menüsü ilk haline gelmiş olur. Kalıcı bir düğme eklemek isterseniz Temporary ayarını kullanmayın; bu durumda menüyü Reset yöntemiyle eski haline döndürmeyi unutmayın.
Söz dizimi
Koleksiyona Application nesnesinin CommandBars özelliğiyle erişilir. Tek bir çubuğa ad ya da sıra numarasıyla, yeni çubuk oluşturmaya ise Add yöntemiyle ulaşılır:
VBA
3 satır
Set cb = Application.CommandBars("Cell")
Set cb = Application.CommandBars.Add(Name, Position, MenuBar, Temporary)
Say = Application.CommandBars.Count
- Name: yeni çubuğun adı; isteğe bağlıdır, verilmezse Excel "Custom 1" gibi bir ad atar.
- Position: çubuğun konumu; isteğe bağlıdır. msoBarPopup (açılır menü), msoBarTop, msoBarBottom, msoBarLeft, msoBarRight, msoBarFloating değerlerini alır.
- MenuBar: True ise yeni çubuk etkin menü çubuğunun yerini alır; isteğe bağlıdır, varsayılanı False'tur.
- Temporary: True ise çubuk Excel kapanınca silinir; isteğe bağlıdır, varsayılanı False'tur.
Önemli özellikler
Koleksiyonun ve tek bir CommandBar nesnesinin sık kullanılan özellikleri şunlardır:- Count: koleksiyondaki çubuk sayısını verir.
- Name: çubuğun adını verir.
- Type: çubuk türünü verir; normal çubuk 0, menü çubuğu 1, açılır menü 2 değerini alır.
- Visible: çubuğun görünür olup olmadığını belirler.
- Enabled: çubuğun kullanıma açık olup olmadığını belirler.
- Controls: çubuktaki düğme, menü ve kutuları içeren CommandBarControls koleksiyonudur.
- Protection: kullanıcının çubuğu değiştirmesine getirilen kısıtlamaları belirler.
Önemli yöntemler
Çubuklar ve içindeki denetimlerle çalışırken şu yöntemler kullanılır:- Add: koleksiyona yeni bir çubuk ekler.
- Controls.Add: çubuğa düğme (msoControlButton), açılır menü (msoControlPopup) ya da kutu ekler. Denetimin Caption özelliği metnini, OnAction özelliği çalışacak makroyu belirler.
- Delete: kullanıcının eklediği çubuğu ya da denetimi siler; yerleşik çubuk silinemez.
- Reset: yerleşik bir çubuğu ya da denetimi ilk haline döndürür.
- FindControl: Type, Id veya Tag değerine göre denetim arar.
- ExecuteMso: Şerit (Ribbon) komutunu kimlik adıyla çalıştırır; GetEnabledMso ve GetVisibleMso yöntemleri komutun durumunu sorgular.
1. Geçici açılır menü oluşturma
Aşağıdaki kodu standart bir modüle yapıştırın. Makro RaporMenu adında geçici bir açılır menü çubuğu oluşturur, üç düğme ekler, çubuğun bilgilerini sayfaya yazar ve çubuğu siler.
VBA
49 satır
Option Explicit
' Düğmelere bağlanan örnek makrolar
Sub AylikRapor()
' Burada rapor işlemleri yer alır
End Sub
Sub GunlukRapor()
' Burada günlük rapor işlemleri yer alır
End Sub
Sub GeciciMenuOlustur()
Dim cb As CommandBar
Dim dgm As CommandBarControl
Dim ws As Worksheet
Set ws = ActiveSheet
' Aynı adlı çubuk varsa önce silinir
On Error Resume Next
Application.CommandBars("RaporMenu").Delete
On Error GoTo 0
' Geçici açılır menü çubuğu oluşturulur
Set cb = Application.CommandBars.Add(Name:="RaporMenu", Position:=msoBarPopup, Temporary:=True)
' Birinci düğme
Set dgm = cb.Controls.Add(Type:=msoControlButton)
dgm.Caption = "Aylık Rapor"
dgm.OnAction = "AylikRapor"
' İkinci düğme
Set dgm = cb.Controls.Add(Type:=msoControlButton)
dgm.Caption = "Günlük Rapor"
dgm.OnAction = "GunlukRapor"
' Üçüncü düğme
Set dgm = cb.Controls.Add(Type:=msoControlButton)
dgm.Caption = "Yazdırma Önizleme"
' Bilgiler sayfaya yazılır
ws.Range("B2").Value = cb.Name
ws.Range("B3").Value = cb.Controls.Count
ws.Range("B4").Value = cb.Controls(1).Caption
ws.Range("B5").Value = cb.Controls(cb.Controls.Count).Caption
' Çubuk silinir
cb.Delete
End Sub
CommandBars
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Öğe | Sonuç |
| 2 | Çubuk adı | RaporMenu |
| 3 | Denetim sayısı | 3 |
| 4 | İlk düğme | Aylık Rapor |
| 5 | Son düğme | Yazdırma Önizleme |
Menü DenemesiExcelDepo v1.0.0
2. Yerleşik çubukların türünü okuma
Kodu standart bir modüle yapıştırın. Makro A sütunundaki çubuk adlarını CommandBars koleksiyonunda arar; her çubuğun Type değerini B sütununa, denetim içerip içermediğini C sütununa yazar. Sağ tık menüleri olan Cell, Row ve Column yerleşik çubuklardır.
VBA
20 satır
Option Explicit
Sub CubukBilgisiYaz()
Dim ws As Worksheet
Dim cb As CommandBar
Dim satir As Long
Set ws = ActiveSheet
' Sayfadaki çubuk adları sırayla okunur
For satir = 2 To 4
Set cb = Application.CommandBars(ws.Cells(satir, 1).Value)
' Çubuk türü (2 = açılır menü)
ws.Cells(satir, 2).Value = cb.Type
' Çubukta en az bir denetim var mı
ws.Cells(satir, 3).Value = (cb.Controls.Count > 0)
Next satir
End Sub
CommandBars
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Çubuk | Tür kodu | Denetim var mı |
| 2 | Cell | 2 | DOĞRU |
| 3 | Row | 2 | DOĞRU |
| 4 | Column | 2 | DOĞRU |
Çubuk TürleriExcelDepo v1.0.0
3. Hücre sağ tık menüsüne geçici düğme ekleme
Kodu standart bir modüle yapıştırın. Makro hücre sağ tık menüsüne (Cell çubuğu) geçici bir düğme ekler, eklenen denetim sayısını ve düğmenin başlığını sayfaya yazar, sonra düğmeyi siler ve fark değerini yeniden yazar.
VBA
33 satır
Option Explicit
' Düğmeye bağlanan örnek makro
Sub RaporuYenile()
' Burada yenileme işlemleri yer alır
End Sub
Sub HucreMenusunuDene()
Dim cb As CommandBar
Dim dgm As CommandBarControl
Dim ws As Worksheet
Dim ilkSayi As Long
Set ws = ActiveSheet
Set cb = Application.CommandBars("Cell")
' Eklemeden önceki denetim sayısı
ilkSayi = cb.Controls.Count
' Geçici düğme eklenir
Set dgm = cb.Controls.Add(Type:=msoControlButton, Temporary:=True)
dgm.Caption = "Raporu Yenile"
dgm.OnAction = "RaporuYenile"
dgm.Tag = "ExcelDestekDeneme"
' Ekleme sonrası fark ve düğme başlığı
ws.Range("B2").Value = cb.Controls.Count - ilkSayi
ws.Range("B3").Value = dgm.Caption
' Düğme silinir, fark yeniden hesaplanır
dgm.Delete
ws.Range("B4").Value = cb.Controls.Count - ilkSayi
End Sub
CommandBars
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Adım | Sonuç |
| 2 | Ekleme sonrası fark | 1 |
| 3 | Düğme başlığı | Raporu Yenile |
| 4 | Silme sonrası fark | 0 |
Hücre MenüsüExcelDepo v1.0.0
Kullanırken dikkat edin
- Kullanırken dikkat edin: Şerit ve Eklentiler sekmesi: Excel 2007 ve sonrasında menü ve araç çubukları yerini Şerit'e (Ribbon) bıraktı. CommandBars ile eklenen özel çubuklar ve menüler Şerit'in Eklentiler (Add-Ins) sekmesinde görünür. Şerit'e yeni sekme ve düğme eklemek için RibbonX (XML) kullanılır; CommandBars bu iş için yeterli değildir.
- Kullanırken dikkat edin: çubuk adları: Yerleşik çubuklara İngilizce iç adlarıyla başvurulur (ör. Cell, Row, Column, Worksheet Menu Bar). Türkçe Excel'de bile bu adlar değişmez. Adı yanlış yazarsanız çalışma zamanı hatası alırsınız.
- Kullanırken dikkat edin: kalıcı değişiklikler: Yerleşik bir sağ tık menüsüne eklediğiniz düğme, Temporary:=True kullanmazsanız Excel kapansa bile kalabilir. Menüyü kullandıktan sonra eklediğiniz denetimi Delete ile silin ya da çubuğu Reset ile eski haline döndürün. Kendi eklediğiniz denetimleri Tag özelliğiyle işaretlerseniz FindControl ile bulup temizleyebilirsiniz.
- Kullanırken dikkat edin: Çalışma kitabına özgü değildir: CommandBars uygulama düzeyindedir; eklediğiniz düğme açık tüm çalışma kitaplarında görünür. Bir çalışma kitabına özel menü istiyorsanız Workbook_Open olayında ekleyin, Workbook_BeforeClose olayında silin.
- İlgili konular:
- CommandBar ve CommandBarControl nesneleri
- CommandBarButton ve CommandBarPopup denetimleri
- Application.OnKey yöntemi
- Workbook_Open ve Workbook_BeforeClose olayları
- Worksheet_BeforeRightClick olayı
- Şerit'e RibbonX ile özel sekme ekleme
- Formüller > Tanımlı Adlar > Ad Yöneticisi (Formulas > Defined Names > Name Manager) ile makro adlarını düzenli tutma