checkbox waarde vasthouden

Status
Niet open voor verdere reacties.

Atwist

Terugkerende gebruiker
Lid geworden
24 jan 2006
Berichten
1.076
Besturingssysteem
Wndows 11
Office versie
2016
Ja hoor ik heb toch nog een vraag.

Ik heb in een userform verschillende checkboxen staan die na het sluiten van het userform worden gereset checkbox = false.
Is er ook een manier om de waarde vast te houden dus als ik het userform sluit dat de checkboxen met =true na het weer openen van het userform ook weer =true zijn.


Alvast allemaal een voorspoedig nieuw jaar
 
En hetzelfde gewenst! :)

Je kunt bij het sluiten van een userform de waarde van een checkbox opslaan in het Tag attribuut van de checkbox:
CheckBox1.Tag = Checkbox1.Value

Bij het openen van het userform kun je deze dan gebruiken om de waarde van de checkbox te zetten:
Checkbox1.Value = CheckBox1.Tag
 
Laatst bewerkt:
Hoi Ed

Wederom dank voor je bijdrage.
Ben even met de code bezig geweest deze doet zijn werk op zich wel maar het blijft ergens hangen en dat ben ik nu aan het uitzoeken waarin dat zit.
 
Ik krijg deze simpel ogende code niet werkend.

Als ik het userform open is de checkbox al true maar ook lichgrijs (disable) maar als op de checkbox klik dan wordt deze "enable" en blijft true
maak ik de checkbox false en sluit het userform met thisworkbook.save dat zou het moeten blijven staan.
Maar als ik het userform weer open dan is checkbox true en "disable"

Code:
Private Sub UserForm_Initialize()
    
''Waarde Checkboxen
    CheckBox1.Value = CheckBox1.Tag

Code:
Private Sub CommandButton17_Click()
CheckBox1.Tag = CheckBox1.Value
ThisWorkbook.Save
Unload Me
End Sub
 
Een checkbox1 wordt op die manier True en "grayed-out" wanneer de tag leeg (null) is.
 
Euh

Dit begrijp ik niet
 
Dat betekend dat op het moment dat je CheckBox1.Value = CheckBox1.Tag doet, de CheckBox1.Tag geen waarde bevat.
 
Oke maar de Checkbox moet dus zijn waarde "True" vasthouden als deze is gemaakt of "False" als deze niet is gemaakt
 
Zolang er initieel GEEN keuze is gemaakt zal hij leeg (NULL) blijven.
Zet anders het document eens hier neer.
 
Laatst bewerkt:
Zal ik doen maar moet het wel even leeg maken.
 
Ik denk dat we elkaar ergens niet goed begrepen hebben. Die instelling voor .Tag blijft bewaard zolang het formulier geladen is.
In de knop Afsluiten doe je echter een Unload Me, waardoor het formulier wordt afgesloten.
Als je wilt dat die instellingen ook dan bewaard blijven zul je met een initialisatie bestandje moeten gaan werken.
Zoniet, gebruik dan Me.Hide in plaats van Unload Me.

Verder raadt ik je aan om een VBA project ALTIJD te beginnen met de regel Option Explicit.
Dit zorgt ervoor dat gebruikte variabelen tijdens het compileren worden gecontroleerd.
Het staat er nu niet in en je hebt nu ergens thue staan in plaats van True.
Option Explicit voorkomt dit.

Als je wilt dat ik de code zodanig aanpas dat er een initialisatie bestandje wordt gebruikt dan laat het maar weten.
 
Het is inderdaad de bedoeling dat de waarde blijft bestaan ook als het document word afgesloten.
 
Dan heb je inderdaad een initialisatiebestand nodig.
Ik zal er straks eens naar kijken.
Ik ga er vanuit dat je werkt met een 32-bit Office installatie?
 
Laatst bewerkt:
Ik heb zelf ook niet stil gezeten en iets uit gedokterd.:shocked:

De code hieronder werkt nu bij mij is wel geen schoonheid, maar ja het werkt.:d

Code:
Private Sub CheckBox1_AfterUpdate()
If CheckBox1 = True Then
    Range("NL!G2").Value = Range("NL!B2").Value
    Range("NL!F2").Value = Range("Algemeen!B1").Value
    Range("NL!E2").Value = Range("Algemeen!B2").Value
    Label13.Caption = Range("NL!F2").Value
    Label14.Caption = Range("NL!G2").Value
    Range("NLK1").Value = 1
Else
    Range("NL!F2").Value = Range("NL!B2").Value
    Range("NL!G2").Value = Range("Algemeen!B1").Value
    Range("NL!E2").Value = Range("Algemeen!B1").Value
    Label13.Caption = Range("NL!F2").Value
    Label14.Caption = Range("NL!G2").Value
End If

Code:
Private Sub UserForm_Initialize()
''Waarde Checkboxen
If Range("NL!E2") = "Betaald" Then
    CheckBox1 = True
    Range("NL!F2").Value = ""
End If
 
Als dat voldoende is dan zal dat prima werken, maar zo is het afhankelijk van een celwaarde en wordt niet de status van de checkbox opgeslagen.

Het is dus maar net hoe je het wilt hebben, maar wel prima gedaan :thumb:

Let er wel op dat het controleren op een tekst als "Betaald" case sensitive is.
Als er dus in de cel "betaald" staat in plaats van "Betaald" gaat het niet goed.

Je kunt dan beter dit gebruiken:
If Lcase(Range("NL!E2")) = "betaald" Then
Dan gaat het altijd goed.
 
Laatst bewerkt:
Het werkt prima op Checkbox1, maar bouw de boel nu naar de andere checkboxen en dan werkt het niet en kan maar niet achter de oorzaak komen.:evil::evil:

Dat If Lcase gaat er in ieder geval in gebouwd worden weer wat geleerd.:thumb:
 
Vergeet ook die Option Explicit niet.
 
Dat gaat er ook in.:thumb:
 
Opslaan van checkboxwaarden middels extra knop op Tab Nederland
Code:
For Each ct In Controls
    If TypeName(ct) = "CheckBox" Then ThisWorkbook.Names.Add ct.Name, ct
Next

Bij Userform_Initialize om de waarden in te lezen bij openen
Code:
  On Error Resume Next
  For Each ct In Controls
    If TypeName(ct) = "CheckBox" Then ct.Value = ThisWorkbook.Names(ct.Name).RefersTo = "=TRUE"
  Next

Het aanklikken v/d checkboxen kan m.i. samengevat worden in 1 algemene macro met een variabele en dan voor elke checkbox 1 regeltje om een waarde aan de variabele toe te kennen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan