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
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,431
Excel Vers. ve Dili
2019 Türkçe
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
 
Katılım
17 Ağustos 2013
Mesajlar
4
Excel Vers. ve Dili
2011-Türkçe
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) :(
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,431
Excel Vers. ve Dili
2019 Türkçe
CheckBox kontrolleri form üzerinde mi sayfada mı?
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,644
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Örnek dosya ekleyebilir misiniz?
 
Katılım
17 Ağustos 2013
Mesajlar
4
Excel Vers. ve Dili
2011-Türkçe
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.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,039
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
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
 
Katılım
17 Ağustos 2013
Mesajlar
4
Excel Vers. ve Dili
2011-Türkçe
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 :)
 

vardar07

Destek Ekibi
Destek Ekibi
Katılım
19 Mart 2008
Mesajlar
2,154
Excel Vers. ve Dili
Office 2007 Enterprise
Türkçe
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.
 

Ömer BARAN

Uzman
Katılım
8 Mart 2011
Mesajlar
12,997
Excel Vers. ve Dili
Office 2013 ( 32 bit ) TÜRKÇE
Altın Üyelik Bitiş Tarihi
(18.03.2020) - Uzman olduğu için tarih geçersiz oldu.
Merhaba Sayın vardar.

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

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,248
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
Buyurun.:cool:
Kod:
Sayfa1.CheckBox2.Value = True
 

vardar07

Destek Ekibi
Destek Ekibi
Katılım
19 Mart 2008
Mesajlar
2,154
Excel Vers. ve Dili
Office 2007 Enterprise
Türkçe
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:

Orion1

Uzman
Uzman
Katılım
1 Mart 2005
Mesajlar
22,248
Excel Vers. ve Dili
Win7 Home Basic TR 64 Bit

Ofis-2010-TR 32 Bit
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
 

vardar07

Destek Ekibi
Destek Ekibi
Katılım
19 Mart 2008
Mesajlar
2,154
Excel Vers. ve Dili
Office 2007 Enterprise
Türkçe
Ç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
 
Üst