Özellik ikonu

CommandButton

İndirme izni yok

Genel Bakış

CommandButton (Komut Düğmesi), kullanıcı üzerine tıkladığında bir olay yordamını çalıştıran ActiveX denetimidir. Hem çalışma sayfasına hem de UserForm üzerine yerleştirilebilir. Düğmenin asıl işlevi, Click olayına yazdığınız VBA kodunu tek tıkla çalıştırmaktır.

CommandButton nedir ve nerede bulunur​

CommandButton, Microsoft Forms kitaplığına ait bir denetimdir. İki yerde kullanılır:
  • Çalışma sayfası: Geliştirici > Denetimler > Ekle > ActiveX Denetimleri > Komut Düğmesi (Developer > Controls > Insert > ActiveX Controls > Command Button) yolu izlenir. Geliştirici sekmesi görünmüyorsa Dosya > Seçenekler > Şeridi Özelleştir (File > Options > Customize Ribbon) bölümünden açılır.
  • UserForm: VBA düzenleyicisinde Araç Kutusu'ndaki düğme simgesi forma sürüklenir.
Çalışma sayfasındaki ActiveX düğmesi ancak Tasarım Modu (Design Mode) açıkken seçilebilir, taşınabilir ve özellikleri değiştirilebilir. Tasarım Modu kapalıyken düğme tıklamaya yanıt verir. Sayfadaki ActiveX denetimleri VBA'da OLEObjects koleksiyonu üzerinden, düğmenin kendi özelliklerine ise OLEObject.Object üzerinden ulaşılır. Düğmeyi kodla oluşturmak için şu kalıplar kullanılır:
VBA 6 satır
' Çalışma sayfasında
Set obj = ws.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
    Left:=10, Top:=10, Width:=100, Height:=30)

' UserForm üzerinde (kod UserForm modülündedir)
Set btn = Me.Controls.Add("Forms.CommandButton.1", "btnTamam", True)
Dikkat: Geliştirici sekmesindeki Düğme (Form Denetimi) farklı bir nesnedir; ona makro Makro Ata (Assign Macro) ile bağlanır ve Click olayı yoktur.

Önemli özellikler​

  • Name: Denetimin kod içindeki adıdır (varsayılan CommandButton1). Olay yordamının adı bu adla oluşur; adı sonradan değiştirirseniz yordam denetimle bağlantısını yitirir.
  • Caption: Düğme üzerinde görünen metindir.
  • Enabled: False olduğunda düğme soluklaşır ve tıklanamaz.
  • Visible: Düğmeyi gösterir ya da gizler.
  • TakeFocusOnClick: False yapılırsa tıklamadan sonra odak düğmede kalmaz; çalışma sayfasında hücre girişini kesintiye uğratmamak için kullanışlıdır.
  • Accelerator: Alt tuşuyla birlikte kullanılacak kısayol harfidir.
  • Default ve Cancel: UserForm'da Enter tuşunun ya da Esc tuşunun düğmeyi tıklamış gibi çalışmasını sağlar.
  • Font, ForeColor, BackColor: Yazı tipi ve renk ayarlarıdır.
  • Picture ve PicturePosition: Düğmeye resim ekler ve resmin metne göre konumunu belirler.
  • WordWrap: Uzun başlığın birden çok satıra bölünmesini sağlar.
  • ControlTipText: Fare üzerine geldiğinde görünen ipucu metnidir; asıl olarak UserForm'da işe yarar.
  • Placement: (yalnızca sayfadaki OLEObject) Düğmenin hücrelerle birlikte taşınıp boyutlanmasını belirler.
  • Left, Top, Width, Height: Konum ve boyuttur; birim noktadır (point).

Önemli yöntemler ve olaylar​

Yöntemler:
  • SetFocus: Odağı düğmeye verir.
  • Move: Düğmeyi yeni konuma taşır, istenirse boyutunu da değiştirir.
  • ZOrder: Düğmeyi diğer nesnelerin önüne ya da arkasına alır.
Olaylar:
  • Click: Düğmeye tıklandığında ya da odaktayken boşluk tuşuna basıldığında oluşur; en çok kullanılan olaydır.
  • DblClick: Çift tıklamada oluşur.
  • MouseDown, MouseUp, MouseMove: Fare düğmesinin basılması, bırakılması ve imlecin hareketi için kullanılır.
  • KeyDown, KeyUp, KeyPress: Odaktayken klavye tuşları için oluşur.
  • GotFocus, LostFocus: Çalışma sayfasındaki düğmenin odağı alması ve yitirmesi.
  • Enter, Exit: UserForm'daki düğmenin odağı alması ve yitirmesi.

Olay yordamı nereye yazılır​

Çalışma sayfasındaki düğmenin olay yordamı, düğmenin bulunduğu sayfanın kod modülüne yazılır. Tasarım Modu açıkken düğmeye çift tıklarsanız ya da sağ tıklayıp Kod Görüntüle (View Code) derseniz Excel yordamın iskeletini otomatik oluşturur. UserForm üzerindeki düğmenin yordamı ise UserForm modülüne yazılır. Standart modüle yazılan CommandButton1_Click yordamı denetime bağlanmaz.
VBA 3 satır
Private Sub CommandButton1_Click()
    ' Düğmeye tıklanınca çalışacak kod
End Sub
Yordam adı DenetimAdı_OlayAdı biçimindedir. Olayın parametre alanı varsa (örneğin KeyPress için KeyAscii) iskelet bunları kendisi ekler; elle yazarken imzayı değiştirmeyin.

1. Kodla düğme oluşturma ve özelliklerini okuma​

Sayfada düğmenin özelliklerinin yazılacağı bir tablo vardır. Aşağıdaki kodu standart bir modüle (Ekle > Modül) yapıştırın ve DugmeEkle makrosunu çalıştırın. Makro, D2 hücresinin konumuna bir ActiveX komut düğmesi ekler ve özelliklerini B sütununa yazar.
VBA 29 satır
Option Explicit

Sub DugmeEkle()
    Dim ws As Worksheet
    Dim obj As OLEObject
    Dim i As Long

    Set ws = ActiveSheet

    ' Önceki çalıştırmadan kalan düğmeyi sil
    For i = ws.OLEObjects.Count To 1 Step -1
        If ws.OLEObjects(i).Name = "btnRapor" Then ws.OLEObjects(i).Delete
    Next i

    ' D2 hücresinin konumuna düğmeyi ekle
    Set obj = ws.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
        Left:=ws.Range("D2").Left, Top:=ws.Range("D2").Top, _
        Width:=120, Height:=30)

    obj.Name = "btnRapor"
    obj.Object.Caption = "Raporu Hazırla"
    obj.Object.TakeFocusOnClick = False

    ' Özellikleri sayfaya yaz
    ws.Range("B2").Value = obj.Name
    ws.Range("B3").Value = obj.Object.Caption
    ws.Range("B4").Value = obj.Width
    ws.Range("B5").Value = obj.Object.TakeFocusOnClick
End Sub
CommandButton
Formülünü incelemek için bir hücre seçin.
AB
1ÖzellikDeğer
2NamebtnRapor
3CaptionRaporu Hazırla
4Width (nokta)120
5TakeFocusOnClickYANLIŞ
Düğme ÖzellikleriExcelDepo v1.0.0
Makro sayfaya btnRapor adlı bir düğme ekledi. B2 hücresine düğmenin adı (btnRapor), B3 hücresine başlığı (Raporu Hazırla), B4 hücresine genişliği (120) ve B5 hücresine TakeFocusOnClick değeri (YANLIŞ) yazıldı. Sayfadaki ActiveX denetimine özelliklerle ulaşırken önce OLEObject nesnesinin kendi özelliklerini (Name, Width), düğmeye özgü özellikleri ise Object üzerinden (Caption, TakeFocusOnClick) kullandığınıza dikkat edin.

2. Döngüyle birden çok düğme ekleme​

A sütunundaki her başlık için E sütununda bir düğme oluşturulacaktır. Kodu standart bir modüle yapıştırıp DugmeleriOlustur makrosunu çalıştırın. Başlığı Sil olan düğme Enabled özelliği False yapılarak devre dışı bırakılır.
VBA 31 satır
Option Explicit

Sub DugmeleriOlustur()
    Dim ws As Worksheet
    Dim obj As OLEObject
    Dim i As Long
    Dim r As Long

    Set ws = ActiveSheet

    ' Önceki çalıştırmadan kalan btn ile başlayan düğmeleri sil
    For i = ws.OLEObjects.Count To 1 Step -1
        If Left(ws.OLEObjects(i).Name, 3) = "btn" Then ws.OLEObjects(i).Delete
    Next i

    ' 2. ile 4. satırlar için birer düğme ekle
    For r = 2 To 4
        Set obj = ws.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
            Left:=ws.Cells(r, 5).Left, Top:=ws.Cells(r, 5).Top, _
            Width:=90, Height:=ws.Cells(r, 5).Height)

        obj.Name = "btn" & (r - 1)
        obj.Object.Caption = ws.Cells(r, 1).Value

        ' Sil düğmesi devre dışı olsun
        obj.Object.Enabled = (ws.Cells(r, 1).Value <> "Sil")

        ws.Cells(r, 2).Value = obj.Name
        ws.Cells(r, 3).Value = obj.Object.Enabled
    Next r
End Sub
CommandButton
Formülünü incelemek için bir hücre seçin.
ABC
1BaşlıkDüğme AdıEtkin
2Kaydetbtn1DOĞRU
3Silbtn2YANLIŞ
4Yazdırbtn3DOĞRU
Düğme ListesiExcelDepo v1.0.0
Makro E2, E3 ve E4 hücrelerinin üzerine üç düğme yerleştirdi. Düğme adları B sütununa yazıldı: btn1, btn2 ve btn3. C sütunu Enabled değerlerini gösterir; Sil düğmesi için YANLIŞ yazılmıştır, bu nedenle o düğme soluk görünür ve tıklanmaz. Düğme adlarını sıralı ve anlamlı verirseniz sonradan OLEObjects("btn1") gibi adla erişmek kolaylaşır.

3. Click olayıyla giriş alanlarını temizleme​

Sayfada bir giriş formu vardır. Önce Geliştirici > Ekle > ActiveX Denetimleri > Komut Düğmesi (Developer > Insert > ActiveX Controls > Command Button) ile D2 hücresi yakınına bir düğme çizin. Tasarım Modu açıkken düğmeyi seçip Özellikler (Properties) penceresinde Name değerini btnTemizle, Caption değerini Formu Temizle yapın. Düğmeye çift tıklayın; açılan sayfa modülüne aşağıdaki kodu yazın. Ardından Tasarım Modu'nu kapatıp düğmeye tıklayın. Bu örnek bir tıklama gerektirdiği için burada otomatik çalıştırılmaz.
VBA 16 satır
Option Explicit

' Bu kod, düğmenin bulunduğu sayfanın kod modülüne yazılır
Private Sub btnTemizle_Click()
    ' B2:B5 aralığındaki girişleri temizle
    Me.Range("B2:B5").ClearContents

    ' İmleci ilk giriş hücresine götür
    Me.Range("B2").Select
End Sub

Private Sub btnTemizle_MouseMove(ByVal Button As Integer, _
    ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    ' Fare düğmenin üzerindeyken başlığı değiştir
    btnTemizle.Caption = "Temizlemek için tıklayın"
End Sub
CommandButton
Formülünü incelemek için bir hücre seçin.
AB
1AlanGiriş
2Ad SoyadAyşe Demir
3ŞehirAnkara
4ÜrünKlavye
5Adet5
Giriş FormuExcelDepo v1.0.0
Düğmeye tıklandığında Click olayı oluşur ve btnTemizle_Click yordamı B2:B5 aralığındaki girişleri siler; imleç B2 hücresine döner. MouseMove yordamı ise fare düğmenin üzerine geldiğinde başlığı değiştirir. Yordam adlarındaki btnTemizle bölümü, düğmenin Name özelliğiyle birebir aynı olmalıdır; farklıysa olay çalışmaz.

Kullanırken dikkat edin​

  • Tasarım Modu açık kalmasın: Düğme tıklamaya yanıt vermiyorsa ilk bakılacak yer Geliştirici > Denetimler > Tasarım Modu (Design Mode) düğmesidir. Mod açıkken düğme yalnızca seçilir ve düzenlenir, kod çalışmaz.
  • Name değiştirince yordam kopar: Olay yordamının adı denetimin adından türer. Düğmenin Name özelliğini sonradan değiştirirseniz eski adlı yordam sıradan bir yordam olarak kalır ve düğmeyle ilişkisi kesilir. Adı önce verin, sonra kodu yazın; ya da yordamın adını yeni ada göre düzeltin.
  • Odak sorunu: Çalışma sayfasında düğmeye tıkladıktan sonra odak düğmede kalır ve örneğin Enter tuşu düğmeyi yeniden tetikleyebilir. Bunu önlemek için TakeFocusOnClick özelliğini False yapın ya da kodun sonunda bir hücreyi seçin.
  • ActiveX ve Form denetimi farkı: ActiveX düğmesinde olay yordamı yazılır, özellikleri ayrıntılı ayarlanır; ancak Mac sürümünde desteklenmez ve Excel Online'da çalışmaz. Form Denetimi düğmesi daha basittir, bir makroya bağlanır ve her platformda çalışır. Dosyayı paylaşacağınız kişilerin ortamına göre seçim yapın.
  • Makro güvenliği ve dosya türü: Düğmedeki kod yalnızca makro içerebilen dosya türünde (.xlsm) saklanır. Makrolar devre dışıysa düğme tıklanınca hiçbir şey olmaz. Dosyayı .xlsx olarak kaydederseniz kod silinir.
  • Boyut ve konum kayması: Ekran yakınlaştırmasını değiştirmek, sütun genişliği ayarlamak ya da farklı ekran çözünürlüğünde açmak ActiveX düğmelerinin boyutunu ve konumunu kaydırabilir. Düğmenin Placement özelliğini ihtiyacınıza göre ayarlayın; sabit kalmasını istiyorsanız xlFreeFloating kullanın.
  • Korumalı sayfa: Sayfa korumalıyken düğme tıklanabilir ancak kodunuz sayfadaki kilitli hücrelere yazmaya çalışırsa hata oluşur. Gerekirse kodda korumayı kaldırıp yeniden uygulayın ya da hücrelerin Locked özelliğini önceden ayarlayın.
  • İlgili konular:
    • UserForm: CommandButton'ın en sık kullanıldığı form penceresi.
    • OLEObjects koleksiyonu: Sayfadaki ActiveX denetimlerine kodla erişim.
    • Shapes ve Buttons: Form denetimi düğmelerini kodla yönetme.
    • Worksheet olayları: Change, SelectionChange gibi sayfa olayları.
    • Application.Run: Adı değişken olarak verilen makroyu çalıştırma.
    • MsgBox: Düğme tıklamasından sonra kullanıcıya bilgi verme.
    • Label, TextBox, ComboBox: Aynı denetim ailesinden diğer denetimler.
    • Geliştirici sekmesi ve Tasarım Modu: Denetim ekleme ve düzenleme arayüzü.
Ö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
11
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst