Özellik ikonu

ToggleButton

İndirme izni yok

Genel Bakış

ToggleButton (Geçiş Düğmesi), basılı ya da basılı değil olmak üzere iki durumu olan bir ActiveX (Microsoft Forms) denetimidir. Tıklandığında durumunu korur ve Value özelliği ile True ya da False değerini verir. Çalışma sayfasında ya da UserForm üzerinde bir ayarı, süzgeci veya görünümü açıp kapatmak için kullanılır.

Nedir ve nereye eklenir​

ToggleButton, normal bir komut düğmesinden farklı olarak tıklandıktan sonra basılı kalır; ikinci tıklamada eski konumuna döner. Bu nedenle "açık/kapalı" türü seçimler için uygundur.

  • Çalışma sayfasına: Geliştirici > Denetimler > Ekle > ActiveX Denetimleri > Geçiş Düğmesi (Developer > Controls > Insert > ActiveX Controls > Toggle Button) yolunu izleyin. Geliştirici sekmesi görünmüyorsa Dosya > Seçenekler > Şeridi Özelleştir (File > Options > Customize Ribbon) bölümünden açın.
  • UserForm üzerine: VBA Düzenleyicisi'nde (Alt+F11) forma çift tıklayın ve Araç Kutusu'ndan (Toolbox) Geçiş Düğmesi simgesini forma sürükleyin.
  • Kodla: Çalışma sayfasına OLEObjects.Add yöntemiyle eklenir.
Kodla ekleme söz dizimi şöyledir:

VBA
Set ole = Worksheets("Sayfa1").OLEObjects.Add(ClassType:="Forms.ToggleButton.1", Left:=200, Top:=20, Width:=110, Height:=28)
Sayfadaki ActiveX denetimi ile düzenleme yapmak için Geliştirici > Denetimler > Tasarım Modu (Developer > Controls > Design Mode) açık olmalıdır. Tasarım modu kapalıyken düğme çalışır ve tıklamalara yanıt verir.

Önemli özellikler​

Aşağıdaki özellikler en sık kullanılanlardır. Sayfadaki denetimde Özellikler (Properties) penceresinden de ayarlanabilir.

  • Value: Düğmenin durumudur. Basılıysa True, değilse False olur. TripleState True ise üçüncü bir durum olarak Null da alabilir. Varsayılan değer False'tur.
  • Caption: Düğme üzerindeki yazıdır. Durum değiştikçe kodla değiştirilerek "Açık" ya da "Kapalı" gibi bilgi verilebilir.
  • TripleState: True yapılırsa düğme üç durumlu olur (True, False, Null). Varsayılan False'tur.
  • Enabled: False olursa düğme tıklamaya yanıt vermez. Varsayılan True'dur.
  • Locked: True olursa kullanıcı düğmenin durumunu değiştiremez; denetim yine de kodla değiştirilebilir.
  • LinkedCell: Çalışma sayfasındaki denetimin durumunu bir hücreye bağlar; hücre TRUE ya da FALSE gösterir. Bu özellik OLEObject nesnesinin özelliğidir ve Özellikler penceresinde de görünür.
  • ControlSource: UserForm üzerindeki denetimin bir hücreye bağlanması için kullanılır.
  • Picture ve PicturePosition: Düğmeye resim ekler ve resmin yazıya göre yerini belirler.
  • WordWrap, BackColor, ForeColor, Font: Görünüm ayarlarıdır.
Sayfadaki ActiveX denetimine kodla erişirken denetim özelliklerine OLEObject.Object üzerinden, yerleşim ve ad özelliklerine (Name, Left, Top, Width, Height, LinkedCell) doğrudan OLEObject üzerinden ulaşılır.

Önemli yöntemler ve olaylar​

  • Change: Value özelliği değiştiğinde oluşur; kullanıcı tıklasa da kod değiştirse de tetiklenir. Durumu izlemek için en güvenilir olaydır.
  • Click: Kullanıcı düğmeye tıkladığında oluşur.
  • MouseDown, MouseUp, KeyDown, KeyUp: Fare ve klavye işlemlerinde oluşur.
  • Enter ve Exit: Düğme odak aldığında ve odağı bıraktığında oluşur.
  • SetFocus: Odağı düğmeye verir.
Örnek olay yordamı söz dizimi:

VBA 3 satır
Private Sub ToggleButton1_Change()
    ' Durum değiştiğinde yapılacak işlemler
End Sub
Yordam adı, denetimin adı ile olay adının alt çizgiyle birleşiminden oluşur. Denetimin adını değiştirirseniz yordamın adını da değiştirmeniz gerekir.

Olay yordamı nereye yazılır​

Olay yordamı denetimin bulunduğu nesnenin kod modülüne yazılır:

  • Çalışma sayfasındaki ActiveX düğme: İlgili sayfanın kod modülüne yazılır. Sayfa sekmesine sağ tıklayıp Kod Görüntüle (View Code) seçin ya da Tasarım Modu açıkken düğmeye çift tıklayın.
  • UserForm üzerindeki düğme: UserForm'un kod modülüne yazılır; forma ya da düğmeye çift tıklayarak açabilirsiniz.
  • Standart modül ve ThisWorkbook: Denetimin olay yordamları buraya yazılırsa çalışmaz. Standart modüle yalnızca denetimi ekleyen ya da okuyan genel yordamlar konur.
Çalışma sayfası modülü içinde denetime adıyla doğrudan erişilebilir; kod başka bir modülden yazılıyorsa Worksheets("Sayfa1").OLEObjects("ToggleButton1").Object biçimi kullanılır. Çalışma kitabını makro içerdiği için .xlsm olarak kaydetmelisiniz.

1. Kodla ekleme ve Value ile Caption okuma​

Sayfaya kodla bir ToggleButton eklenir, durumu önce okunur, sonra True yapılır ve sonuçlar B2:B4 hücrelerine yazılır. Aşağıdaki kodu standart bir modüle yapıştırın ve ToggleOlustur makrosunu çalıştırın.
VBA 27 satır
Option Explicit

Sub ToggleOlustur()
    Dim ws As Worksheet
    Dim ole As OLEObject

    Set ws = ThisWorkbook.Worksheets("Özellikler")

    ' Aynı adlı eski denetim varsa silinir
    On Error Resume Next
    ws.OLEObjects("tglDurum").Delete
    On Error GoTo 0

    ' Yeni geçiş düğmesi eklenir
    Set ole = ws.OLEObjects.Add(ClassType:="Forms.ToggleButton.1", _
        Left:=220, Top:=20, Width:=110, Height:=28)
    ole.Name = "tglDurum"

    With ole.Object
        .Caption = "Kapalı"
        ws.Range("B2").Value = .Value      ' başlangıç durumu
        .Value = True                      ' düğmeyi basılı yap
        .Caption = "Açık"
        ws.Range("B3").Value = .Value      ' yeni durum
        ws.Range("B4").Value = .Caption    ' güncel yazı
    End With
End Sub
ToggleButton
Formülünü incelemek için bir hücre seçin.
AB
1ÖzellikSonuç
2Başlangıç ValueYANLIŞ
3Tıklama sonrası ValueDOĞRU
4CaptionAçık
ÖzelliklerExcelDepo v1.0.0
Yeni eklenen düğmenin başlangıç Value değeri B2 hücresinde YANLIŞ olarak okunur. Kod Value özelliğini True yaptıktan sonra B3 hücresinde DOĞRU görülür; B4 hücresinde ise güncel Caption olan Açık yazar. Aynı makroyu tekrar çalıştırırsanız eski düğme silinir, böylece sayfada aynı adlı iki denetim oluşmaz.

Düğmenin görünmesi için sayfaya bakın; Tasarım Modu açıksa düğmeye tıklayamazsınız.

2. Change olayıyla stok durumunu işaretleme​

Sayfada ToggleButton1 adlı bir düğme varken durumu değiştikçe C sütununa stok durumu yazılır: düğme basılıysa stoku 20'nin altındaki ürünler "Kritik", diğerleri "Yeterli" olarak işaretlenir; değilse C sütunu temizlenir. Aşağıdaki kodu Stok Kontrol sayfasının kod modülüne yapıştırın (sayfa sekmesine sağ tıklayın, Kod Görüntüle). Düğme sayfaya kodla eklenip Value değeri True yapıldığında Change olayı çalışır.
VBA 27 satır
Private Sub ToggleButton1_Change()
    Dim tb As Object
    Dim i As Long

    ' Denetime OLEObjects üzerinden erişilir
    Set tb = Me.OLEObjects("ToggleButton1").Object

    For i = 2 To 8
        If tb.Value = True Then
            ' Stok 20'nin altındaysa kritik say
            If Me.Cells(i, 2).Value < 20 Then
                Me.Cells(i, 3).Value = "Kritik"
            Else
                Me.Cells(i, 3).Value = "Yeterli"
            End If
        Else
            Me.Cells(i, 3).ClearContents
        End If
    Next i

    ' Düğme yazısı duruma göre değişir
    If tb.Value = True Then
        tb.Caption = "Durumu Gizle"
    Else
        tb.Caption = "Durumu Göster"
    End If
End Sub
ToggleButton
Formülünü incelemek için bir hücre seçin.
ABC
1ÜrünStokDurum
2Kalem120Yeterli
3Defter15Kritik
4Silgi8Kritik
5Dosya45Yeterli
6Zımba19Kritik
7Makas60Yeterli
8Kalemtıraş20Yeterli
Stok KontrolExcelDepo v1.0.0
Düğmenin Value değeri True olunca Change olayı çalışır ve C sütunu doldurulur. Defter için C3 hücresinde Kritik, Dosya için C5 hücresinde Yeterli görülür. Stoku tam 20 olan Kalemtıraş için C8 hücresinde Yeterli yazar, çünkü koşul "20'den küçük" biçimindedir.

Düğmeye daha sonra tıkladığınızda Value False olur, olay yeniden çalışır ve C sütunu temizlenir.

3. LinkedCell ile düğmeyi hücreye bağlama​

ToggleButton kodla eklenir ve durumu D2 hücresine bağlanır. C sütunundaki formüller D2 hücresine bakarak fiyatı KDV dahil ya da KDV hariç gösterir. Aşağıdaki kodu standart bir modüle yapıştırın ve KdvAnahtariEkle makrosunu çalıştırın.
VBA 24 satır
Option Explicit

Sub KdvAnahtariEkle()
    Dim ws As Worksheet
    Dim ole As OLEObject

    Set ws = ThisWorkbook.Worksheets("KDV Anahtarı")

    On Error Resume Next
    ws.OLEObjects("tglKdv").Delete
    On Error GoTo 0

    ' Düğme F2 hücresinin yanına yerleştirilir
    Set ole = ws.OLEObjects.Add(ClassType:="Forms.ToggleButton.1", _
        Left:=ws.Range("F2").Left, Top:=ws.Range("F2").Top, _
        Width:=110, Height:=26)
    ole.Name = "tglKdv"

    ' Düğmenin durumu D2 hücresine bağlanır
    ole.LinkedCell = "D2"

    ole.Object.Caption = "KDV Dahil"
    ole.Object.Value = True
End Sub
ToggleButton
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünFiyatGösterilen FiyatAnahtar
2Klasör85,00102,00DOĞRU
3Kalem Seti120,00144,00
4Defter45,5054,60
5Ataç12,7515,30
6Dosya30,0036,00
KDV AnahtarıExcelDepo v1.0.0
Düğme D2 hücresine bağlandığı için hücre düğmenin durumunu gösterir; makro Value değerini True yaptıktan sonra D2 hücresinde DOĞRU görülür. C sütunundaki formüller bu hücreye bakar: Klasör için C2 hücresi 102,00, Kalem Seti için C3 hücresi 144,00 değerini verir.

Düğmeye tıklayıp durumu kapattığınızda D2 hücresi FALSE olur ve C sütunu KDV hariç fiyatı gösterir. Bu yöntemde olay yordamı yazmanız gerekmez; durumu hücre üzerinden formüllerle kullanabilirsiniz.

Kullanırken dikkat edin​

  • ActiveX ve platform sınırı: ToggleButton bir ActiveX denetimidir. Excel'in Windows sürümlerinde kullanılır; Mac için Excel ve Excel Online'da ActiveX denetimleri çalışmaz. Geliştirici sekmesindeki Form Denetimleri (Form Controls) arasında geçiş düğmesi bulunmaz; benzer iş için onay kutusu kullanılabilir.
  • Tasarım Modu: Sayfadaki düğmeyi seçmek, taşımak ya da çift tıklayıp kod yazmak için Tasarım Modu açık olmalıdır. Düğmeyi gerçekten kullanmak için bu modu kapatın. Tasarım Modu açıkken düğme tıklamaya yanıt vermez.
  • Value özelliği ve TripleState: TripleState True ise Value değeri Null olabilir. Böyle bir düğmede If tb.Value Then gibi bir sınama hata verebilir. Üç durumlu kullanmayacaksanız TripleState özelliğini False bırakın.
  • Olay yordamı yanlış yerde çalışmaz: Sayfadaki düğmenin olay yordamı o sayfanın kod modülünde, UserForm üzerindeki düğmenin yordamı UserForm modülünde olmalıdır. Standart modüle yazılan ToggleButton1_Click gibi bir yordam kendiliğinden çalışmaz. Denetimin adını değiştirirseniz yordam adını da değiştirin.
  • Kodla eklerken ad çakışması: OLEObjects.Add ile aynı adı iki kez vermeye çalışırsanız hata alırsınız. Örneklerdeki gibi eski denetimi önce silmek ya da adı kontrol etmek makroyu tekrar çalıştırılabilir yapar.
  • Dosya türü ve kaybolan denetimler: Makro içeren çalışma kitabını .xlsm olarak kaydedin; .xlsx olarak kaydedilirse olay yordamları silinir. ActiveX denetimleri bazen Windows güncellemelerinden sonra boyut ve konum sorunu yaşayabilir; böyle bir durumda denetimin Left, Top, Width ve Height değerlerini kodla yeniden ayarlayabilirsiniz.
  • İlgili konular:
    • CheckBox (Onay Kutusu): Bir ya da birden çok seçeneği işaretlemek için kullanılır.
    • OptionButton (Seçenek Düğmesi): Gruptan tek seçim yapmak için kullanılır.
    • CommandButton (Komut Düğmesi): Tek seferlik işlem başlatmak için kullanılır.
    • UserForm: Denetimlerin üzerinde toplandığı iletişim penceresi.
    • OLEObjects ve OLEObject: Sayfadaki ActiveX denetimlerine kodla erişim sağlar.
    • LinkedCell ve ControlSource: Denetim değerini hücreye bağlar.
    • Worksheet_Change olayı: Hücre değişikliklerini izlemek için kullanılır.
    • EĞER: Bağlı hücrenin TRUE ya da FALSE değerine göre sonuç üretmek için kullanılır.
Ö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
7
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst