Genel Bakış
OptionButton (Seçenek Düğmesi), kullanıcının bir grup seçenek arasından yalnızca birini işaretlemesini sağlayan denetimdir. UserForm üzerinde, çalışma sayfasında ActiveX denetimi olarak ya da Form Denetimi olarak kullanılabilir. Seçili durumu Value özelliğiyle okunur ve koddan değiştirilir.
Excel'de üç yerde karşınıza çıkar:
Önemli olaylar Click, Change, GotFocus, LostFocus, BeforeUpdate ve AfterUpdate olaylarıdır. Click olayı kullanıcı düğmeyi tıkladığında tetiklenir; Value özelliği koddan True yapıldığında da tetiklenir. Olay yordamı, düğmenin bulunduğu modüle yazılır: UserForm için form modülüne, ActiveX sayfa denetimi için ilgili sayfanın kod modülüne.
UserForm modülünde tipik kullanım şöyledir:
Makro çalıştıktan sonra Hızlı Kargo düğmesi seçilidir. B2 hücresinde Seçili değil, B3 hücresinde Seçili, B4 hücresinde Seçili değil yazar. Aynı sayfadaki Form Denetimi düğmeleri tek grup sayıldığı için ikinci düğmeyi seçmek diğerlerini otomatik boşaltır. Durum, True ya da False ile değil, xlOn ve xlOff sabitleriyle okunur.
Kredi Kartı düğmesinin Value özelliği True yapıldığı için B3 hücresinde Seçili görünür. Nakit için B2 hücresinde Seçili değil, Havale/EFT için B4 hücresinde Seçili değil yazar. Üç düğmenin GroupName değeri aynı olduğundan aynı anda yalnızca biri seçili kalır. ActiveX denetimine Object üzerinden erişildiğine dikkat edin: ole.Object.Value.
Seçili düğme %20 KDV olduğundan oran 0,20 alınır. Klavye için KDV dahil fiyat C2 hücresinde 540,00, Monitör için C4 hücresinde 5.040,00 olarak görünür. Gerçek bir kullanımda düğmeye bir makro atayıp oranı o makronun içinde seçime göre belirleyebilirsiniz; böylece kullanıcı düğmeyi değiştirdiğinde hesap yenilenir.
OptionButton nedir ve nerede kullanılır
Seçenek düğmesi, birbirini dışlayan seçenekler için kullanılır: kargo türü, ödeme yöntemi, cinsiyet, rapor biçimi gibi. Aynı gruptaki düğmelerden biri seçildiğinde diğerleri otomatik olarak boşalır. Onay kutusundan (CheckBox) farkı budur; onay kutularında birden fazla kutu aynı anda işaretli olabilir.Excel'de üç yerde karşınıza çıkar:
- UserForm: VBA Düzenleyicisi'nde araç kutusundan forma eklenir. Bu, en yaygın kullanımdır.
- ActiveX denetimi: Geliştirici > Denetimler > Ekle > ActiveX Denetimleri (Developer > Controls > Insert > ActiveX Controls) ile sayfaya eklenir. Olay yordamları sayfa modülüne yazılır. Düzenlemek için Tasarım Modu (Design Mode) açık olmalıdır.
- Form Denetimi: Geliştirici > Denetimler > Ekle > Form Denetimleri (Form Controls) ile eklenir. Olay yerine bir makro atanır ya da Hücre bağlantısı (Cell link) ile seçimin sırası bir hücreye yazılır.
Önemli özellikler
UserForm ve ActiveX seçenek düğmesinde sık kullanılan özellikler şunlardır:- Value: Düğme seçiliyse True, değilse False döner. Koddan True yapılırsa aynı gruptaki diğer düğmeler otomatik False olur.
- Caption: Düğmenin yanında görünen metindir.
- GroupName: Düğmenin ait olduğu grubun adıdır. Aynı GroupName'e sahip düğmeler tek grup sayılır.
- Name: Denetimin koddaki adıdır (ör. optNakit). Ad önekleri okunabilirliği artırır.
- Enabled: False olduğunda düğme tıklanamaz ve soluk görünür.
- Visible: Düğmeyi gösterir ya da gizler.
- TripleState: True olursa Value özelliği Null değerini de alabilir. Normal kullanımda gerekmez.
- LinkedCell: ActiveX denetiminde seçim durumunun (DOĞRU/YANLIŞ) yazılacağı hücreyi belirtir.
Gruplama ve olaylar
Bir UserForm'da tüm seçenek düğmeleri varsayılan olarak tek gruptur. Birbirinden bağımsız iki grup istiyorsanız iki yoldan birini kullanın:- Frame: Düğmeleri bir çerçeve (Frame) denetiminin içine yerleştirin. Her çerçeve ayrı bir grup olur.
- GroupName: Her grup için farklı bir GroupName verin.
Önemli olaylar Click, Change, GotFocus, LostFocus, BeforeUpdate ve AfterUpdate olaylarıdır. Click olayı kullanıcı düğmeyi tıkladığında tetiklenir; Value özelliği koddan True yapıldığında da tetiklenir. Olay yordamı, düğmenin bulunduğu modüle yazılır: UserForm için form modülüne, ActiveX sayfa denetimi için ilgili sayfanın kod modülüne.
UserForm modülünde tipik kullanım şöyledir:
VBA
16 satır
Private Sub UserForm_Initialize()
optNakit.Value = True ' varsayılan seçim
End Sub
Private Sub optKart_Click()
lblBilgi.Caption = "Kart ile ödeme seçildi"
End Sub
Private Sub cmdTamam_Click()
If optNakit.Value Then
Range("B1").Value = "Nakit"
ElseIf optKart.Value Then
Range("B1").Value = "Kredi Kartı"
End If
Unload Me
End Sub
1. Form Denetimi seçenek düğmeleri ekleme ve durumlarını okuma
Sayfada A2:A4 hücrelerinde kargo seçenekleri var. Makro üç Form Denetimi seçenek düğmesi ekler, başlıklarını bu hücrelerden alır, ikinciyi seçer ve her düğmenin durumunu B sütununa yazar. Kodu standart bir modüle yapıştırın.
VBA
34 satır
Option Explicit
' Kargo sayfasına üç seçenek düğmesi ekler ve durumlarını sayfaya yazar
Sub SecenekDugmeleriniKur()
Dim ws As Worksheet
Dim shp As Shape
Dim i As Long
Set ws = ThisWorkbook.Worksheets("Kargo")
' Önceki çalıştırmadan kalan form denetimlerini sil
For i = ws.Shapes.Count To 1 Step -1
If ws.Shapes(i).Type = msoFormControl Then ws.Shapes(i).Delete
Next i
' Üç seçenek düğmesi ekle; başlıklar A2:A4 hücrelerinden gelir
For i = 1 To 3
Set shp = ws.Shapes.AddFormControl(xlOptionButton, 220, 20 + (i - 1) * 24, 130, 20)
shp.Name = "optKargo" & i
shp.OLEFormat.Object.Caption = ws.Cells(i + 1, 1).Value
Next i
' İkinci düğmeyi seç; diğerleri otomatik boşalır
ws.Shapes("optKargo2").ControlFormat.Value = xlOn
' Her düğmenin durumunu B sütununa yaz
For i = 1 To 3
If ws.Shapes("optKargo" & i).ControlFormat.Value = xlOn Then
ws.Cells(i + 1, 2).Value = "Seçili"
Else
ws.Cells(i + 1, 2).Value = "Seçili değil"
End If
Next i
End Sub
OptionButton
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Seçenek | Durum |
| 2 | Standart Kargo | Seçili değil |
| 3 | Hızlı Kargo | Seçili |
| 4 | Aynı Gün Teslimat | Seçili değil |
KargoExcelDepo v1.0.0
2. ActiveX seçenek düğmelerini GroupName ile gruplama
Bu kez sayfaya ActiveX seçenek düğmeleri eklenir. Düğmelerin başlıkları A2:A4 hücrelerinden alınır, hepsine aynı GroupName verilir, Kredi Kartı düğmesi seçilir ve her düğmenin Value özelliği B sütununa yazılır. Kodu standart bir modüle yapıştırın.
VBA
38 satır
Option Explicit
' ActiveX seçenek düğmeleri ekler, gruplar ve durumlarını sayfaya yazar
Sub ActiveXSecenekleriKur()
Dim ws As Worksheet
Dim ole As OLEObject
Dim adlar As Variant
Dim i As Long
Set ws = ThisWorkbook.Worksheets("Odeme")
adlar = Array("optNakit", "optKart", "optHavale")
' Önceki ActiveX denetimlerini sil
For i = ws.OLEObjects.Count To 1 Step -1
ws.OLEObjects(i).Delete
Next i
' Üç düğme ekle ve aynı gruba bağla
For i = 0 To 2
Set ole = ws.OLEObjects.Add(ClassType:="Forms.OptionButton.1", _
Left:=220, Top:=20 + i * 24, Width:=130, Height:=20)
ole.Name = adlar(i)
ole.Object.Caption = ws.Cells(i + 2, 1).Value
ole.Object.GroupName = "OdemeTuru"
Next i
' Kredi Kartı düğmesini seç
ws.OLEObjects("optKart").Object.Value = True
' Value özelliğini B sütununa yaz
For i = 0 To 2
If ws.OLEObjects(adlar(i)).Object.Value = True Then
ws.Cells(i + 2, 2).Value = "Seçili"
Else
ws.Cells(i + 2, 2).Value = "Seçili değil"
End If
Next i
End Sub
OptionButton
Formülünü incelemek için bir hücre seçin.| A | B | |
|---|---|---|
| 1 | Ödeme Yöntemi | Durum |
| 2 | Nakit | Seçili değil |
| 3 | Kredi Kartı | Seçili |
| 4 | Havale/EFT | Seçili değil |
OdemeExcelDepo v1.0.0
3. Seçilen düğmeye göre hesaplama yapma
Sayfada ürünlerin KDV hariç fiyatları var. Makro iki seçenek düğmesi ekler (%10 ve %20), %20 olanı seçer, hangi düğmenin seçili olduğuna bakarak oranı belirler ve KDV dahil fiyatı C sütununa yazar. Kodu standart bir modüle yapıştırın.
VBA
41 satır
Option Explicit
' Seçili KDV düğmesine göre KDV dahil fiyatı hesaplar
Sub KdvDahilHesapla()
Dim ws As Worksheet
Dim shp As Shape
Dim oran As Double
Dim i As Long
Set ws = ThisWorkbook.Worksheets("KDV")
' Önceki çalıştırmadan kalan form denetimlerini sil
For i = ws.Shapes.Count To 1 Step -1
If ws.Shapes(i).Type = msoFormControl Then ws.Shapes(i).Delete
Next i
' %10 düğmesi
Set shp = ws.Shapes.AddFormControl(xlOptionButton, 220, 20, 110, 20)
shp.Name = "optKdv10"
shp.OLEFormat.Object.Caption = "%10 KDV"
' %20 düğmesi
Set shp = ws.Shapes.AddFormControl(xlOptionButton, 220, 44, 110, 20)
shp.Name = "optKdv20"
shp.OLEFormat.Object.Caption = "%20 KDV"
' %20 düğmesini seç
ws.Shapes("optKdv20").ControlFormat.Value = xlOn
' Seçili düğmeye göre oranı belirle
If ws.Shapes("optKdv10").ControlFormat.Value = xlOn Then
oran = 0.1
Else
oran = 0.2
End If
' KDV dahil fiyatları yaz
For i = 2 To 7
ws.Cells(i, 3).Value = ws.Cells(i, 2).Value * (1 + oran)
Next i
End Sub
OptionButton
Formülünü incelemek için bir hücre seçin.| A | B | C | |
|---|---|---|---|
| 1 | Ürün | KDV Hariç | KDV Dahil |
| 2 | Klavye | 450,00 | 540,00 |
| 3 | Fare | 250,00 | 300,00 |
| 4 | Monitör | 4.200,00 | 5.040,00 |
| 5 | Yazıcı | 3.100,00 | 3.720,00 |
| 6 | Kulaklık | 780,00 | 936,00 |
| 7 | Webcam | 920,00 | 1.104,00 |
KDVExcelDepo v1.0.0
Kullanırken dikkat edin
- Value türü denetim çeşidine göre değişir: UserForm ve ActiveX düğmesinde Value, True ya da False döner. Form Denetimi düğmesinde ise ControlFormat.Value, xlOn (1) ya da xlOff (-4146) değerini verir. İkisini karıştırırsanız koşullarınız beklenmedik sonuç verir.
- Gruplamayı unutmayın: Aynı çerçevede ya da aynı GroupName ile tanımlanmamış düğmeler tek grup sayılır. Aynı formda iki ayrı soru için ayrı gruplar gerekiyorsa her soruyu bir Frame içine alın veya farklı GroupName verin. Form Denetimlerinde bunun karşılığı Grup Kutusu'dur.
- Başlangıçta hiçbir düğme seçili olmaz: Form açıldığında düğmelerin hiçbiri seçili değildir. Kullanıcı bir düğme seçtikten sonra arayüzden seçimi kaldıramaz; yalnızca başka bir düğme seçebilir. Bu yüzden varsayılan bir seçeneği UserForm_Initialize olayında Value = True ile işaretlemek iyi bir uygulamadır. Seçimi temizlemek için koddan tüm düğmelere False atanabilir.
- Click olayı koddan da tetiklenir: Value özelliğini koddan True yaptığınızda Click olayı çalışır. Olay yordamınızda değer atayan başka kod varsa istenmeyen döngüler oluşabilir. Gerekirse bir Boolean bayrak değişkeniyle olayın çalışmasını geçici olarak engelleyin.
- ActiveX ve Tasarım Modu: Sayfadaki ActiveX düğmesini seçmek, taşımak ya da özelliklerini düzenlemek için Tasarım Modu açık olmalıdır. Düğme tıklanabilsin istiyorsanız Tasarım Modu'nu kapatın. ActiveX denetimleri Excel'in Mac sürümünde desteklenmez ve farklı Office sürümleri arasında bazen sorun çıkarır. Taşınabilirlik önemliyse Form Denetimlerini veya UserForm'u tercih edin.
- Adlandırma ve erişim: Düğmelere optNakit, optKart gibi anlamlı adlar verin. Sayfa üzerindeki ActiveX düğmelerine sayfa modülünde doğrudan adıyla, başka bir modülden ise OLEObjects("optKart").Object üzerinden erişirsiniz. Form Denetimlerine Shapes("ad").ControlFormat ile erişilir.
- İlgili konular:
- CheckBox: Birden fazla seçime izin veren onay kutusu.
- ToggleButton: İki durumlu basılı kalan düğme.
- Frame: Seçenek düğmelerini gruplamaya yarayan çerçeve.
- ComboBox ve ListBox: Çok sayıda seçenekten seçim için denetimler.
- UserForm: Denetimlerin yerleştirildiği iletişim penceresi.
- OLEObjects ve Shapes: Sayfadaki ActiveX ve Form Denetimlerine erişim koleksiyonları.
- Select Case: Seçili düğmeye göre dallanma için deyim.
- EĞER ve ELEMAN: Hücre bağlantısı ile alınan seçim sırasına göre sonuç üreten işlevler.