Özellik ikonu

CommandBars

İndirme izni yok

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.

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.
Adı bilinmeyen bir çubuğa başvurulursa çalışma zamanı hatası oluşur; bu yüzden ad yazarken İngilizce yerleşik adı kullanın (ör. Cell, Row, Column).

Ö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.
AB
1ÖğeSonuç
2Çubuk adıRaporMenu
3Denetim sayısı3
4İlk düğmeAylık Rapor
5Son düğmeYazdırma Önizleme
Menü DenemesiExcelDepo v1.0.0
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.

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.
ABC
1ÇubukTür koduDenetim var mı
2Cell2DOĞRU
3Row2DOĞRU
4Column2DOĞRU
Çubuk TürleriExcelDepo v1.0.0
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.

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.
AB
1AdımSonuç
2Ekleme sonrası fark1
3Düğme başlığıRaporu Yenile
4Silme sonrası fark0
Hücre MenüsüExcelDepo v1.0.0
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.

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
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
8
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst