Özellik ikonu

OptionButton

İndirme izni yok

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.

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.
Geliştirici (Developer) sekmesi görünmüyorsa Dosya > Seçenekler > Şeridi Özelleştir (File > Options > Customize Ribbon) bölümünden açın.

Ö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.
Form Denetimi seçenek düğmesinde durum ControlFormat.Value ile okunur ve yazılır. Değer xlOn (seçili) ya da xlOff (seçili değil) olur; True ya da False değildir.

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.
Form Denetimlerinde ayrım için Grup Kutusu (Group Box) kullanılır. Sayfadaki ActiveX düğmeleri de GroupName ile gruplanır.

Ö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.
AB
1SeçenekDurum
2Standart KargoSeçili değil
3Hızlı KargoSeçili
4Aynı Gün TeslimatSeçili değil
KargoExcelDepo v1.0.0
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.

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.
AB
1Ödeme YöntemiDurum
2NakitSeçili değil
3Kredi KartıSeçili
4Havale/EFTSeçili değil
OdemeExcelDepo v1.0.0
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.

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.
ABC
1ÜrünKDV HariçKDV Dahil
2Klavye450,00540,00
3Fare250,00300,00
4Monitör4.200,005.040,00
5Yazıcı3.100,003.720,00
6Kulaklık780,00936,00
7Webcam920,001.104,00
KDVExcelDepo v1.0.0
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.

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.
Ö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
10
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst