• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

CheckBox VBA Döngü

Katılım
17 Ağustos 2013
Mesajlar
4
Excel Vers. ve Dili
2011-Türkçe
Merhaba,

VBA' de yazmış olduğum bir checkbox kodunu kısaltmak istiyorum.
Toplam 130 adet checkbox var ve arttırılabilir de. Aşağıdaki kodu 1'den 130'a kadar olacak şekilde döngüye sokmaya çalışıyorum. Yardımcı olursanız sevinirim.


Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then Range("g11").Value = Range("g10").Value * Range("b11").Value
If CheckBox1.Value = False Then Range("g11").Value = 0
If CheckBox1.Value = True Then CheckBox5.Value = "0"
If CheckBox1.Value = True Then CheckBox2.Value = "0"
If CheckBox1.Value = True Then CheckBox3.Value = "0"
If CheckBox1.Value = True Then CheckBox4.Value = "0
"


Bir de bu checkboxların bir tuşla temizlenmesi için yazılmış kodlar var, bunu da kısaltmak istiyorum.


Private Sub CommandButton1_Click()
CheckBox1 = 0
CheckBox2 = 0
CheckBox3 = 0
.
.
.
.
CheckBox130 = 0
End sub
 
Aşağıdaki kodları kullanın

Kod:
Private Sub CheckBox1_Click()
    Dim chk As Control
    If CheckBox1.Value = True Then
        Range("g11").Value = Range("g10").Value * Range("b11").Value
        
        For Each chk In Me.Controls
            If TypeName(Me.Controls(1)) = "CheckBox" And Not chk.Name = "CheckBox1" Then
                chk.Value = 0
            End If
        Next
    ElseIf CheckBox1.Value = False Then
        Range("g11").Value = 0
    End If
End Sub

Private Sub CommandButton1_Click()
    Dim chk As Control
    For Each chk In Me.Controls
        If TypeName(Me.Controls(1)) = "CheckBox" Then
            chk.Value = 0
        End If
    Next
End Sub
 
Aşağıdaki kodları kullanın

Kod:
Private Sub CheckBox1_Click()
    Dim chk As Control
    If CheckBox1.Value = True Then
        Range("g11").Value = Range("g10").Value * Range("b11").Value
        
        For Each chk In Me.Controls
            If TypeName(Me.Controls(1)) = "CheckBox" And Not chk.Name = "CheckBox1" Then
                chk.Value = 0
            End If
        Next
    ElseIf CheckBox1.Value = False Then
        Range("g11").Value = 0
    End If
End Sub

Private Sub CommandButton1_Click()
    Dim chk As Control
    For Each chk In Me.Controls
        If TypeName(Me.Controls(1)) = "CheckBox" Then
            chk.Value = 0
        End If
    Next
End Sub

İlginiz için teşekkür ederim ancak " me.controls " kısmında hata veriyor ("compile error, method or data member not found" yazıyor) :(
 
CheckBox kontrolleri form üzerinde mi sayfada mı?
 
Checkboxlar excel çalışma sayfasında,
Dosya da yükleyemiyorum maalesef :(

Konuyu daha ayrıntılı anlatmak gerekirse; excel çalışma sayfasında bir değerlendirme formu var ve 26 maddelik formda her maddeye 1' den 5' e kadar puan verebildiğiniz checkboxlar var (yani toplamda 130 checkbox) ben bununla ilgili yukarıda paylaştığım kodları tek tek yazarak formu çalıştırabildim ama biraz amelelik yapıp her checkbox için bunu elle yazdım. Yapmak istediğim bu kodu kısaltarak gerektiğinde daha çok checkbox ı bu koda dahil etmek.

Bunların silinmesi için de commandbutton ekledim, butona bastığınızda form tamamen temizleniyor. Ancak bunun için de yukarıda belirttiğim gibi 1'den 130' a kadar tek tek elle yazdım.

Şimdiden yardımlarınız için teşekkürler.
 
Her CheckBox nesnesinin Click olayına kod yazılacaksa bunu en iyi Class Module uygulaması ile yapabilirsiniz. Forumda örnekler var. İncelemeniz gerekiyor.

Tüm nesneleri temizlemek için aşağıdaki kodu kullanabilirsiniz.

Kod:
Private Sub CommandButton1_Click()
    For Each Nesne In ActiveSheet.OLEObjects
        If InStr(Nesne.progID, "CheckBox") > 0 Then
            Nesne.Object.Value = 0
        End If
    Next
End Sub
 
Her CheckBox nesnesinin Click olayına kod yazılacaksa bunu en iyi Class Module uygulaması ile yapabilirsiniz. Forumda örnekler var. İncelemeniz gerekiyor.

Tüm nesneleri temizlemek için aşağıdaki kodu kullanabilirsiniz.

Kod:
Private Sub CommandButton1_Click()
    For Each Nesne In ActiveSheet.OLEObjects
        If InStr(Nesne.progID, "CheckBox") > 0 Then
            Nesne.Object.Value = 0
        End If
    Next
End Sub

Teşekkür ederim,
tüm nesneleri bu kodla temizleyebiliyorum, class modülü de biraz kurcalamam lazım :)
 
Her CheckBox nesnesinin Click olayına kod yazılacaksa bunu en iyi Class Module uygulaması ile yapabilirsiniz. Forumda örnekler var. İncelemeniz gerekiyor.

Tüm nesneleri temizlemek için aşağıdaki kodu kullanabilirsiniz.

Kod:
Private Sub CommandButton1_Click()
    For Each Nesne In ActiveSheet.OLEObjects
        If InStr(Nesne.progID, "CheckBox") > 0 Then
            Nesne.Object.Value = 0
        End If
    Next
End Sub

Bu kodla CheckBox ları işaretleyebiliyoruz yada kaldırabiliyoruz. Peki içlerinden sadece birini işaretletmek istersek mesela a=2 "CheckBox" & a gibi nasıl bir döngü yapmak lazım.
 
Merhaba Sayın vardar.

Aşağıdaki gibi sonuç almanız lazım.
.
Kod:
a=2
Controls("CheckBox" & a)=.....
 
Buyurun.:cool:
Kod:
Sayfa1.CheckBox2.Value = True
 
Merhaba Sayın vardar.

Aşağıdaki gibi sonuç almanız lazım.
.
Kod:
a=2
Controls("CheckBox" & a)=.....


Buyurun.:cool:
Kod:
Sayfa1.CheckBox2.Value = True

Sayın Orion1 Sayfa1.Controls("CheckBox" & a).Value = True şeklinde olması lazım diyorum ancak hata veriyor. Buradaki a döngüde kullanılan şart.

Kod:
Sub mv()
a = 2
For i = 1 To 5
If i = a Then
Sayfa1.Controls("CheckBox" & a).Value = True
End If
Next
End Sub
 
Son düzenleme:
sayfada controls işe yaramaz.
Buyurun.:cool:
Kod:
Sub sayfada_nesne_isimleri()
Dim ob As Object, a As Integer
a = 2
For Each ob In ActiveSheet.OLEObjects
   If Right(ob.Name, 1) = a Then
        ob.Object = True
    End If
Next
End Sub
 
Çok Teşekkürler. küçük bir değişiklik yapınca işlem tamam.
Kod:
Sub sayfada_nesne_isimleri()
Dim ob As Object, a As Integer
a = 12
For Each ob In ActiveSheet.OLEObjects
[COLOR="Blue"]If ob.Name = "CheckBox" & a Then[/COLOR]
        ob.Object = True
    End If
Next
End Sub
 
Geri
Üst