• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

blijven tonen van een regel bij het uitvinken van een checkbox

Status
Niet open voor verdere reacties.

adriaanj

Gebruiker
Lid geworden
8 apr 2010
Berichten
21
Op een scherm heb ik negen checkboxes. Als een van deze checkboxes aangevinkt wordt, moet er een regel verschijnen. Als een van de checkboxes uitgevinkt wordt, moet de regel blijven staan, tenzij het de laatste checkbox is die nog aangevinkt staat. Nu heb ik een macro waar de regel altijd verdwijnt als een checkbox uitgevinkt wordt:

Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
Rows("91").Select
Selection.EntireRow.Hidden = False
End If
If CheckBox1.Value = False Then
Rows("91").Select
Selection.EntireRow.Hidden = True
End If
End Sub

Private Sub CheckBox2_Click()
If CheckBox2.Value = True Then
Rows("91").Select
Selection.EntireRow.Hidden = False
End If
If CheckBox2.Value = False Then
Rows("91").Select
Selection.EntireRow.Hidden = True
End If
End Sub

Private Sub CheckBox3_Click()
If CheckBox3.Value = True Then
Rows("91").Select
Selection.EntireRow.Hidden = False
End If
If CheckBox3.Value = False Then
Rows("91").Select
Selection.EntireRow.Hidden = True
End If
End Sub

(en dit zo verder tot en met CheckBox9)

Hoe krijg ik dit werkend?
 
Wat is het doel om 9 checkboxen te gebruiken voor het eventueel verbergen van dezelfde rij?

Met vriendelijke groet,


Roncancio
 
de rij die tevoorschijn komt is een toelichting voor minstens 1 van de checkboxen. Voor elke checkbox is dat dezelfde toelichting, maar omdat ik negen opties heb, heb ik ook negen checkboxen nodig.
 
adriaanj,

Volgens mij werkt dit ook (is wat korter)
Code:
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
  Rows("91").EntireRow.Hidden = False
End If
If CheckBox1.Value = False Then
  Rows("91").EntireRow.Hidden = True
End If
End Sub
Zou je niet zoiets als For Each CheckBox kunnen gebruiken?
Of anders met Select Case en dan steeds naar dit stukje code verwijzen?
 
bedankt, inderdaad werkt het zo ook, maar zo zou het ook nog kunnen (weer korter)

Private Sub CheckBox1_Click()
If CheckBox1 = True Then
Rows("91").EntireRow.Hidden = False
Else: Selection.EntireRow.Hidden = True
End If
End Sub

Probleem is dat dit functioneel niet goed gaat. Stel checkbox1 en checkbox2 zijn beide True. als checkbox 2 dan op False wordt gezet verdwijnt Row 91. Dit is niet wenselijk, omdat checkbox1 nog op true staat. Ik weet niet hoe ik dit op moet lossen.
 
ik heb er nu het volgende van gemaakt (en het werkt!), ik vroeg me er alleen nog bij af hoe ik dit korter kan maken:

Private Sub CheckBox1_Click()
If CheckBox1 = True Or CheckBox2.Value = True Or CheckBox3.Value = True Or CheckBox4.Value = True Or CheckBox5.Value = True Or CheckBox6.Value = True Or CheckBox7.Value = True Or CheckBox8.Value = True Or CheckBox9.Value = True Then
Rows("91").EntireRow.Hidden = False
Else: Rows("91").EntireRow.Hidden = True
End If
End Sub

Private Sub CheckBox2_Click()
If CheckBox1 = True Or CheckBox2.Value = True Or CheckBox3.Value = True Or CheckBox4.Value = True Or CheckBox5.Value = True Or CheckBox6.Value = True Or CheckBox7.Value = True Or CheckBox8.Value = True Or CheckBox9.Value = True Then
Rows("91").EntireRow.Hidden = False
Else: Rows("91").EntireRow.Hidden = True
End If
End Sub

Private Sub CheckBox3_Click()
If CheckBox1 = True Or CheckBox2.Value = True Or CheckBox3.Value = True Or CheckBox4.Value = True Or CheckBox5.Value = True Or CheckBox6.Value = True Or CheckBox7.Value = True Or CheckBox8.Value = True Or CheckBox9.Value = True Then
Rows("91").EntireRow.Hidden = False
Else: Rows("91").EntireRow.Hidden = True
End If
End Sub

Private Sub CheckBox4_Click()
If CheckBox1 = True Or CheckBox2.Value = True Or CheckBox3.Value = True Or CheckBox4.Value = True Or CheckBox5.Value = True Or CheckBox6.Value = True Or CheckBox7.Value = True Or CheckBox8.Value = True Or CheckBox9.Value = True Then
Rows("91").EntireRow.Hidden = False
Else: Rows("91").EntireRow.Hidden = True
End If
End Sub

Private Sub CheckBox5_Click()
If CheckBox1 = True Or CheckBox2.Value = True Or CheckBox3.Value = True Or CheckBox4.Value = True Or CheckBox5.Value = True Or CheckBox6.Value = True Or CheckBox7.Value = True Or CheckBox8.Value = True Or CheckBox9.Value = True Then
Rows("91").EntireRow.Hidden = False
Else: Rows("91").EntireRow.Hidden = True
End If
End Sub

Private Sub CheckBox6_Click()
If CheckBox1 = True Or CheckBox2.Value = True Or CheckBox3.Value = True Or CheckBox4.Value = True Or CheckBox5.Value = True Or CheckBox6.Value = True Or CheckBox7.Value = True Or CheckBox8.Value = True Or CheckBox9.Value = True Then
Rows("91").EntireRow.Hidden = False
Else: Rows("91").EntireRow.Hidden = True
End If
End Sub

Private Sub CheckBox7_Click()
If CheckBox1 = True Or CheckBox2.Value = True Or CheckBox3.Value = True Or CheckBox4.Value = True Or CheckBox5.Value = True Or CheckBox6.Value = True Or CheckBox7.Value = True Or CheckBox8.Value = True Or CheckBox9.Value = True Then
Rows("91").EntireRow.Hidden = False
Else: Rows("91").EntireRow.Hidden = True
End If
End Sub

Private Sub CheckBox8_Click()
If CheckBox1 = True Or CheckBox2.Value = True Or CheckBox3.Value = True Or CheckBox4.Value = True Or CheckBox5.Value = True Or CheckBox6.Value = True Or CheckBox7.Value = True Or CheckBox8.Value = True Or CheckBox9.Value = True Then
Rows("91").EntireRow.Hidden = False
Else: Rows("91").EntireRow.Hidden = True
End If
End Sub

Private Sub CheckBox9_Click()
If CheckBox1 = True Or CheckBox2.Value = True Or CheckBox3.Value = True Or CheckBox4.Value = True Or CheckBox5.Value = True Or CheckBox6.Value = True Or CheckBox7.Value = True Or CheckBox8.Value = True Or CheckBox9.Value = True Then
Rows("91").EntireRow.Hidden = False
Else: Rows("91").EntireRow.Hidden = True
End If
End Sub
 
De code is voor elke CheckBox hetzelfde: vergelijken of 1 van de andere checkboxen waar is.
Wat je dus kunt doen is verwijzen naar een stukje code die dezelfde handelingen uitvoert.
Dat heeft 2 grote voordelen:

  1. Code wordt een stuk korter en daardoor ook beter leesbaar
  2. Je hoeft maar 1 keer de code te schrijven zodat je er steeds naar kan verwijzen.
Als aanvulling op #2 kan ik nog zeggen dat de code veel makkelijker aan te passen is omdat je dat maar 1 keer hoeft te doen.

De code wordt dan:
Code:
Private Sub CheckBox1_Click()
CB
End Sub

Private Sub CheckBox2_Click()
CB
End Sub

Private Sub CheckBox3_Click()
CB
End Sub

Private Sub CheckBox4_Click()
CB
End Sub

Private Sub CheckBox5_Click()
CB
End Sub

Private Sub CheckBox6_Click()
CB
End Sub

Private Sub CheckBox7_Click()
CB
End Sub

Private Sub CheckBox8_Click()
CB
End Sub

Private Sub CheckBox9_Click()
CB
End Sub

Sub CB()
If CheckBox1 = True Or CheckBox2.Value = True Or CheckBox3.Value = True Or CheckBox4.Value = True Or CheckBox5.Value = True Or CheckBox6.Value = True Or CheckBox7.Value = True Or CheckBox8.Value = True Or CheckBox9.Value = True Then
Rows("91").EntireRow.Hidden = False
Else: Rows("91").EntireRow.Hidden = True
End If
End Sub
Zoals je ziet heb ik de code verder ongemoeid gelaten.

Met vriendelijke groet,


Roncancio
 
Thanks! Dit werkt prima en qua onderhoud is het ook waar ik naar zocht. Probleem opgelost.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan