Özellik ikonu

CheckBox

İndirme izni yok

Genel Bakış

CheckBox (Onay Kutusu), kullanıcının bir seçeneği işaretleyerek açıp kapatmasını sağlayan denetimdir. Çalışma sayfasında Form Denetimi ya da ActiveX Denetimi olarak, UserForm üzerinde ise MSForms denetimi olarak kullanılır. VBA ile durumu okunur, değiştirilir ve işaretleme anında çalışacak kod olaylarla bağlanır.

Üç farklı CheckBox türü​

Excel'de aynı görünen üç ayrı onay kutusu vardır ve VBA'da her biri farklı davranır:
  • Form Denetimi: Geliştirici > Ekle > Form Denetimleri > Onay Kutusu (Developer > Insert > Form Controls > Check Box) ile eklenir. VBA'da sayfanın CheckBoxes koleksiyonundan erişilir. Değeri xlOn, xlOff ya da xlMixed sabitleriyle okunur ve yazılır. Kutuya Makro Ata (Assign Macro) ile bir makro bağlanır; olay yordamı yoktur.
  • ActiveX Denetimi: Geliştirici > Ekle > ActiveX Denetimleri (ActiveX Controls) altından eklenir. VBA'da OLEObjects koleksiyonu ve nesnenin Object özelliği üzerinden kullanılır; değeri True, False ya da Null'dır. Click ve Change gibi olayları vardır. Ayarları değiştirmek için Tasarım Modu (Design Mode) açık olmalıdır.
  • UserForm denetimi: UserForm'a araç kutusundan eklenir. Kod içinde doğrudan adıyla (CheckBox1) ya da Controls koleksiyonuyla erişilir. Özellikleri ActiveX denetimiyle aynıdır.
Bu sayfada tür belirtilmedikçe özellikler ActiveX ve UserForm denetimleri için, Form Denetimi farkları ise ayrıca belirtilerek anlatılır. ActiveX denetimleri Excel'in Mac sürümlerinde desteklenmez.

Söz dizimi​

Onay kutusunu oluşturma ve değerini ayarlama söz dizimi türe göre değişir:
VBA 10 satır
' Form Denetimi
Set cb = Worksheets("Sayfa1").CheckBoxes.Add(Left, Top, Width, Height)
cb.Value = xlOn

' ActiveX Denetimi (çalışma sayfasında)
Set ole = Worksheets("Sayfa1").OLEObjects.Add(ClassType:="Forms.CheckBox.1", Left:=20, Top:=20, Width:=100, Height:=20)
ole.Object.Value = True

' UserForm denetimi
UserForm1.CheckBox1.Value = True
Parametreler ve değerler:
  • Left, Top: kutunun sayfadaki konumu, punto cinsinden. Hücreye yerleştirmek için hücrenin Left ve Top değerleri kullanılır. CheckBoxes.Add'de zorunludur.
  • Width, Height: kutunun genişliği ve yüksekliği, punto cinsinden. CheckBoxes.Add'de zorunludur.
  • ClassType: ActiveX denetim türünü belirten sınıf adı; onay kutusu için Forms.CheckBox.1 yazılır.
  • Left, Top, Width, Height (OLEObjects.Add): isteğe bağlıdır; verilmezse varsayılan konum ve boyut kullanılır.
  • Value (Form Denetimi): xlOn (işaretli, 1), xlOff (işaretsiz, -4146) ya da xlMixed (belirsiz, 2).
  • Value (ActiveX ve UserForm): True (işaretli), False (işaretsiz) ya da Null (yalnızca TripleState açıkken, belirsiz durum). Varsayılan değer False'tur.

Önemli özellikler​

  • Value: işaret durumunu verir ya da değiştirir. Form Denetimi'nde değer xlOn/xlOff, diğerlerinde True/False biçimindedir.
  • Caption: kutunun yanında görünen metin. Form Denetimi'nde de aynı adla kullanılır.
  • LinkedCell: kutunun durumunu bir hücreyle bağlar. Kutu işaretliyse hücreye TRUE yazılır. İşaretsiz kutuda durum hiç değişmediyse bağlı hücre boş kalabilir; hücrede FALSE değeri, kutunun durumu değiştiğinde görünür. Form Denetimi'nde durum belirsizse hücreye #YOK (#N/A) yazılır. ActiveX'te OLEObject üzerinden, Form Denetimi'nde doğrudan kullanılır.
  • ControlSource: ActiveX ve UserForm denetimlerinde değerin bağlandığı hücre ya da alan.
  • TripleState: True olursa kutu üç durumlu çalışır (işaretli, işaretsiz, Null). Varsayılan False'tur.
  • Enabled ve Locked: Enabled False ise kutu soluk görünür ve tıklanmaz; Locked True ise değer kullanıcı tarafından değiştirilemez ama kutu soluk görünmez.
  • Visible: kutuyu gösterir ya da gizler.
  • Alignment: ActiveX ve UserForm'da işaret karesinin metnin solunda mı sağında mı olacağını belirler.
  • Name: kodda kullanılan ad (CheckBox1 gibi). Anlamlı adlar (chkOnay) kodu okunur kılar.
  • TopLeftCell: Form Denetimi ve ActiveX denetimlerinde kutunun sol üst köşesinin bulunduğu hücreyi verir; satır eşleştirmede işe yarar.

Önemli yöntemler ve olaylar​

  • SetFocus: ActiveX ve UserForm kutusuna odağı verir.
  • Click: kutuya tıklandığında oluşur.
  • Change: Value değiştiğinde oluşur; değer kodla değiştirildiğinde de tetiklenir.
  • BeforeUpdate ve AfterUpdate: değer güncellenmeden önce ve sonra oluşur.
  • Enter ve Exit: kutu odağı alırken ve kaybederken oluşur.
Olay yordamı nereye yazılır: sayfaya eklenmiş ActiveX kutusunun olayları o sayfanın kod modülüne (örneğin Sayfa1 modülüne), UserForm üzerindeki kutunun olayları UserForm'un kod modülüne yazılır. Yordam adı kutunun adıyla başlar, örneğin CheckBox1_Click. Form Denetimi'nin olayı yoktur; kutuya sağ tıklayıp Makro Ata ile standart modüldeki bir Sub atanır. Hangi kutunun tıklandığı Application.Caller ile öğrenilir.

1. Satırlara onay kutusu ekleme ve hücreye bağlama​

Sayfada görev adları A sütununda, onay kutularının duracağı B sütunu boş, durum bilgisinin yazılacağı C ve D sütunları hazırdır. Aşağıdaki kodu standart modüle (Ekle > Modül) yapıştırın ve çalıştırın. Makro her görev satırına bir Form Denetimi onay kutusu ekler ve kutuyu C sütunundaki hücreye bağlar. D sütunundaki EĞER formülü bağlı hücreye bakarak durumu yazar.
VBA 23 satır
Option Explicit

Sub OnayKutulariniEkle()
    Dim ws As Worksheet
    Dim cb As CheckBox
    Dim r As Long

    Set ws = ActiveSheet

    For r = 2 To 6
        ' Kutuyu B sütunundaki hücrenin üzerine yerleştir
        Set cb = ws.CheckBoxes.Add(ws.Cells(r, 2).Left + 10, ws.Cells(r, 2).Top + 1, 18, 14)
        cb.Caption = ""
        ' Kutunun durumu C sütunundaki hücreye TRUE/FALSE olarak yazılır
        cb.LinkedCell = ws.Cells(r, 3).Address(True, True)
        ' Çift numaralı satırlardaki kutuları işaretle
        If r Mod 2 = 0 Then
            cb.Value = xlOn
        Else
            cb.Value = xlOff
        End If
    Next r
End Sub
CheckBox
Formülünü incelemek için bir hücre seçin.
ABCD
1GörevSeçOnayDurum
2Aylık rapor hazırlamaDOĞRUTamamlandı
3Fatura kontrolüBekliyor
4Stok sayımıDOĞRUTamamlandı
5Müşteri toplantısıBekliyor
6Bütçe güncellemeDOĞRUTamamlandı
7Tamamlanan görev sayısı3
Görev ListesiExcelDepo v1.0.0
Makro her satıra bir onay kutusu ekler ve kutuyu C sütunundaki hücreye bağlar. Bu çalıştırmada yalnızca işaretli kutuların bağlı hücrelerinde DOĞRU görünür; işaretsiz kutuların bağlı hücreleri boş kalır. Birinci görevin durumu Tamamlandı, ikinci görevin durumu Bekliyor olarak hesaplanır. İşaretli kutu sayısını COUNTIF formülü 3 olarak verir. Kullanıcı bir kutuyu elle işaretlediğinde bağlı hücre ve formüller de anında güncellenir; kod yazmaya gerek kalmaz.

2. Onay kutularının durumunu döngüyle okuma​

Sayfada hizmet adları ve ücretler A ve B sütunlarında, onay kutularının duracağı C sütunu ve sonuçların yazılacağı D sütunu hazırdır. Kodu standart modüle yapıştırın. Makro önce her satıra bir Form Denetimi onay kutusu ekler ve bir Boolean dizisine göre işaretler. Sonra CheckBoxes koleksiyonunu gezer, Value değerini xlOn ile karşılaştırır ve seçilen hizmetlerin ücretlerini toplar.
VBA 38 satır
Option Explicit

Sub HizmetSecimleriniOku()
    Dim ws As Worksheet
    Dim cb As CheckBox
    Dim r As Long
    Dim toplam As Double
    Dim secili As Variant

    Set ws = ActiveSheet
    ' Hangi hizmetlerin işaretleneceği (2. satırdan 6. satıra)
    secili = Array(True, False, True, True, False)

    ' 1. adım: her satıra bir onay kutusu ekle
    For r = 2 To 6
        Set cb = ws.CheckBoxes.Add(ws.Cells(r, 3).Left + 10, ws.Cells(r, 3).Top + 1, 18, 14)
        cb.Caption = ""
        If secili(r - 2) Then
            cb.Value = xlOn
        Else
            cb.Value = xlOff
        End If
    Next r

    ' 2. adım: kutuları gez ve durumlarını oku
    For Each cb In ws.CheckBoxes
        r = cb.TopLeftCell.Row
        ' Form Denetimi'nde karşılaştırma xlOn ile yapılır, True ile değil
        If cb.Value = xlOn Then
            ws.Cells(r, 4).Value = "Seçildi"
            toplam = toplam + ws.Cells(r, 2).Value
        Else
            ws.Cells(r, 4).Value = "Seçilmedi"
        End If
    Next cb

    ws.Range("B7").Value = toplam
End Sub
CheckBox
Formülünü incelemek için bir hücre seçin.
ABCD
1HizmetÜcretSeçSonuç
2Hızlı kargo45,00Seçildi
3Hediye paketi15,00Seçilmedi
4Ek garanti120,00Seçildi
5Sigorta30,00Seçildi
6Kurulum desteği80,00Seçilmedi
7Seçilen toplam195,00
Ek HizmetlerExcelDepo v1.0.0
İlk hizmetin sonucu Seçildi, ikinci hizmetin sonucu Seçilmedi olarak yazılır. Seçilen hizmetlerin ücret toplamı B7 hücresinde 195,00 olur. Kutu ile satır eşleşmesi TopLeftCell.Row ile kurulur, bu yüzden kutuların her biri kendi satırının hücreleri üzerinde durmalıdır.

3. ActiveX onay kutusunun Click olayı​

Sayfaya Geliştirici > Ekle > ActiveX Denetimleri > Onay Kutusu ile bir kutu ekleyin ve adının CheckBox1 olduğundan emin olun (Geliştirici sekmesindeki Özellikler penceresinden kontrol edebilirsiniz). Ardından sayfa sekmesine sağ tıklayıp Kod Görüntüle (View Code) deyin ve aşağıdaki kodu o sayfanın kod modülüne yapıştırın. Tasarım Modu kapalıyken kutuyu işaretleyip işareti kaldırarak B2 hücresini izleyin.
VBA 13 satır
Option Explicit

' Bu kod ActiveX onay kutusunun bulunduğu sayfanın modülüne yazılır
Private Sub CheckBox1_Click()
    ' ActiveX kutusunda Value True ya da False döner
    If CheckBox1.Value = True Then
        Range("B2").Value = "Sözleşme onaylandı"
        Range("B3").Value = Format(Date, "dd.mm.yyyy")
    Else
        Range("B2").Value = "Onay bekleniyor"
        Range("B3").ClearContents
    End If
End Sub
CheckBox
Formülünü incelemek için bir hücre seçin.
AB
1AlanDeğer
2Sözleşme durumuOnay bekleniyor
3Onay tarihi
Onay FormuExcelDepo v1.0.0
Bu örnek etkileşimli olduğu için otomatik çalıştırılmaz. Kutuyu işaretlediğinizde Click olayı tetiklenir; B2 hücresine onay metni, B3 hücresine o günün tarihi yazılır. İşareti kaldırdığınızda B2 yeniden bekleme metnine döner ve B3 temizlenir. Aynı mantık UserForm üzerindeki bir CheckBox için de geçerlidir; kodu yalnızca UserForm'un kod modülüne yazmanız yeterlidir.

Kullanırken dikkat edin​

  • Form Denetimi'nde True ile karşılaştırmayın: Form Denetimi'nin Value özelliği True/False değil, xlOn (1) ve xlOff (-4146) döndürür. Koşulu cb.Value = True biçiminde kurarsanız işaretli kutu bile yanlış sonuç verir. Karşılaştırmayı daima xlOn ile yapın. ActiveX ve UserForm kutularında ise True/False kullanılır.
  • Tasarım Modu: ActiveX kutusunun özelliklerini değiştirmek, boyutunu ayarlamak ya da silmek için Geliştirici sekmesindeki Tasarım Modu açık olmalıdır. Kutuyu gerçekten işaretleyip olayı denemek için modu kapatın. Olay yordamı çalışmıyorsa ilk bakılacak yer budur.
  • Kutunun adı ve olay yordamı: Olay yordamı kutunun adına bağlıdır. Kutuyu yeniden adlandırırsanız ya da kopyalarsanız (CheckBox2 gibi yeni ad alır) eski adla yazılmış yordam artık çalışmaz. Önce kutuyu adlandırın, sonra kodu yazın.
  • Aynı makroyu tekrar çalıştırmak: Kutu ekleyen makroyu iki kez çalıştırırsanız aynı yerde üst üste ikinci bir kutu oluşur. Kutuları eklemeden önce var olanları silmeyi ya da kutuları yalnızca bir kez eklemeyi planlayın. Silmek için kutunun adını verip Delete yöntemini kullanabilirsiniz.
  • Bağlı hücre ve belirsiz durum: LinkedCell ile bağlanan hücreye kutu işaretliyse TRUE yazılır. İşaretsiz kutuda durum hiç değişmediyse bağlı hücre boş kalabilir; bu durumda hücreye bakan EĞER gibi formüller kutuyu işaretsiz sayar. Kutuyu belirsiz duruma (xlMixed ya da Null) getirirseniz Form Denetimi bağlı hücreye #YOK (#N/A) yazar; bu hücreye bağlı formüller de hata verir. Üç durumlu kutu gerekmiyorsa TripleState özelliğini kapalı tutun.
  • Birden çok kutuyu toplu işleme: Çok sayıda kutuyu gezerken Form Denetimi için CheckBoxes koleksiyonunu, ActiveX için OLEObjects koleksiyonunu, UserForm için ise Controls koleksiyonunu kullanın. UserForm'da TypeName(ctl) = "CheckBox" koşuluyla kutuları diğer denetimlerden ayırabilirsiniz.
  • İlgili konular: OptionButton (Seçenek Düğmesi), ComboBox, ListBox, UserForm, Controls koleksiyonu, CheckBoxes koleksiyonu, OLEObjects koleksiyonu, Shapes koleksiyonu, Geliştirici sekmesi, Makro Ata, EĞER ve EĞERSAY işlevleri.
Ö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
12
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst