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.
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.
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.
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.
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.
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.
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.
Set ole = Worksheets("Sayfa1").OLEObjects.Add(ClassType:="Forms.ToggleButton.1", Left:=200, Top:=20, Width:=110, Height:=28)
Ö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.
Ö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.
VBA
3 satır
Private Sub ToggleButton1_Change()
' Durum değiştiğinde yapılacak işlemler
End Sub
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.
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.| A | B | |
|---|---|---|
| 1 | Özellik | Sonuç |
| 2 | Başlangıç Value | YANLIŞ |
| 3 | Tıklama sonrası Value | DOĞRU |
| 4 | Caption | Açık |
ÖzelliklerExcelDepo v1.0.0
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.| A | B | C | |
|---|---|---|---|
| 1 | Ürün | Stok | Durum |
| 2 | Kalem | 120 | Yeterli |
| 3 | Defter | 15 | Kritik |
| 4 | Silgi | 8 | Kritik |
| 5 | Dosya | 45 | Yeterli |
| 6 | Zımba | 19 | Kritik |
| 7 | Makas | 60 | Yeterli |
| 8 | Kalemtıraş | 20 | Yeterli |
Stok KontrolExcelDepo v1.0.0
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.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün | Fiyat | Gösterilen Fiyat | Anahtar |
| 2 | Klasör | 85,00 | 102,00 | DOĞRU |
| 3 | Kalem Seti | 120,00 | 144,00 | |
| 4 | Defter | 45,50 | 54,60 | |
| 5 | Ataç | 12,75 | 15,30 | |
| 6 | Dosya | 30,00 | 36,00 |
KDV AnahtarıExcelDepo v1.0.0
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.