Checkbox - als functie werkt niet in Userform

Status
Niet open voor verdere reacties.

robert hofman

Gebruiker
Lid geworden
23 jul 2009
Berichten
12
Ik heb op dit forum en andere fora rondgespeurd maar kom er na 2 uur zoeken niet uit!

Doel: d.m.v. checkbox Ja of nee als tekst in laten vullen:

(is nu als aangevinkt onwaar)

De code zoals ik die had bedacht/uitgezocht werkt niet, wellicht kunnen jullie eens meekijken?



-------

Code:
Private Sub CheckBox1_Click()

End Sub

Code:
Private Sub UserForm_Initialize()
'voordat het formulier wordt geldan voer eerst onderstaande uit
    'zet de cursus in vakje voornaam
    titel.SetFocus
End Sub
Code:
Private Sub knop_verwerk_Click()
Dim MyRange As Variant
Set MyRange = Worksheets("doc-verhaal")

'tegen flikkeren van beeldscherm
Application.ScreenUpdating = False

'waar gaan we opslaan
legeregel = MyRange.Range("B" & Rows.Count).End(xlUp).Row + 1

'wat gaan we opslaan
          titel = titel.Value
          jaar = jaar.Value
          Auteur = Auteur.Value
          trefwoord1 = trefwoord1.Value
          trefwoord2 = trefwoord2.Value
          trefwoord3 = trefwoord3.Value
          trefwoord4 = trefwoord4.Value
          opmerkingen = opmerkingen.Value
         
'********HIER BEGINT MIJN STUK*****

 If CheckBox1 = True Then
          CheckBox1.Value = "yep"
          If CheckBox1 = False Then
          CheckBox.Value = "nee"
        End If

'********HIER BEGINT EINDIGT HIJ*****        
        
        
'controle dat in ieder geval wel dat het adres en de roepnaam ingevuld worden
If titel = Empty Or trefwoord1 = Empty Then
    MsgBox "Voer 'minimaal' titel en 2 trefwoorden in!"
    Exit Sub
Else
'waar gaan we het opslaan
    MyRange.Range("B" & legeregel) = titel
    MyRange.Range("C" & legeregel) = jaar
    MyRange.Range("D" & legeregel) = Auteur
    MyRange.Range("E" & legeregel) = trefwoord1
    MyRange.Range("F" & legeregel) = trefwoord2
    MyRange.Range("G" & legeregel) = trefwoord3
    MyRange.Range("H" & legeregel) = trefwoord4
    MyRange.Range("I" & legeregel) = opmerkingen
    MyRange.Range("J" & legeregel) = CheckBox1
    
'geef nieuwe cellen een rand opmaak
    MyRange.Range("A" & legeregel, ("AG" & legeregel)).Borders.LineStyle = xlContinuous
   
   verhaaltoevoegen.Hide
    
End If

response = MsgBox("Wilt u nog een nieuw verhaal toevoegen?", vbYesNo, Title:="doc opslaan?")
    If response = vbNo Then
        Unload Me
        Else
        Unload Me
        verhaaltoevoegen.Show
        On Error Resume Next
        verhaaltoevoegen.Show
        On Error GoTo 0
    End If
'tegen flikkeren van beeldscherm
Application.ScreenUpdating = True
End Sub

Code:
Private Sub knop_annuleer_Click()
'als er op de knop annuleren gedrukt wordt gebeurt dit
If titel = Empty And soort = Empty Then
    Me.Hide
    Unload Me
Else
    response = MsgBox("Weet u zeker dat u de doc niet wilt opslaan?", vbYesNo, Title:="doc opslaan?")
        If response = vbYes Then
            verhaaltoevoegen.Show
        End If
End If

End Sub
 
Laatst bewerkt door een moderator:
Je uitleg is niet echt duidelijk, maar probeer zoiets als dit eens:

Code:
If CheckBox1.Checked = Then
CheckBox1.Text = "yep"
Else
CheckBox.Text = "Nop" 'Of gewoon "Nee", wat jij wil :P)
End If

En gebruik de volgende keer CODE tags om je geplaatste code leesbaarder te maken.
 
Laatst bewerkt:
Bedankt voor je snelle reactie,

hmm, lijkt niet te werken krijg nu Syntaxis fout....

Voor duidelijkheid heb ik even de totale code toegevoegd (bijlage)

.... ik heb/had hem werkende met waar/onwaar maar ik wil alleen gewoon een 'ja' als aangevinkt is, en nee als hij niet is aangevinkt.
 

Bijlagen

Hmmm, ik zie dat ik een paar typfouten heb gemaakt. Zie vet gedrukt, in rode tekst:

Code:
If CheckBox1.Checked [B][COLOR="red"]=[/COLOR][/B] Then [B][COLOR="red"]'DIE = MOET WEG[/COLOR][/B]
CheckBox1.Text = "Ja"
Else
CheckBox[B][COLOR="red"]1[/COLOR][/B].Text = "Nee"
End If

Ik wil je overigens wel aanraden om je controls duidelijke namen te geven om hun functie beter te omschrijven. Ik heb mijzelf aangeleerd om eerst de afkorting van de desbetreffende control op te geven en daarna de functie die bij die control hoort. In jouw geval gaat het om opslaan, dus zou ik die checkbox deze naam geven:

cbOpslaan

cb is de afkorting van checkbox en Opslaan is de functie die daar bij hoort. Op die manier kun je als je code schijft in één oogopslag zien waar die checkbox voor dient door naar de naam te kijken.
Want zeg nou zelf "CheckBox1" als naam zegt natuurlijk helemaal niks. :)

Als je die checkbox die naam geeft, dan ziet je code er zo uit:

Code:
If cbOpslaan.Checked Then
cbOpslaan.Text = "Ja"
Else
cbOpslaan.Text = "Nee"
End If
 
Laatst bewerkt:
Ja klopt,

Ik ben wat dat betreft te gehaast, het betreft hier een -simpele- manier om via userforms gegevens op te slaan.

Gezien ik geen Excel expert ben maar een heel eind kom is dit één van mijn fouten.

Echter, krijg ik nu de fout 'Kan gegevenslid niet vinden' ?!

Toch vreemd gezien het feit dat alles er netjes in staa, Checkbox1 is veranderd naar cbOpslaan.
 
Die error komt op het moment dat ik de code laat 'afspelen', hij arceert dan de verbeterde code met geel, ofwel fout zou daarin zitten?
 
Zou je de gehele code even kunnen plaatsen, dan valt het beter te begrijpen.

Alvast bedankt :)
 
Bij deze de gehele code: (van dit userform)


Private Sub UserForm_Initialize()
'voordat het formulier wordt geldan voer eerst onderstaande uit
'zet de cursus in vakje voornaam
titel.SetFocus
End Sub
Private Sub knop_verwerk_Click()
Dim MyRange As Variant
Set MyRange = Worksheets("doc-verhaal")

'tegen flikkeren van beeldscherm
Application.ScreenUpdating = False

'waar gaan we opslaan
legeregel = MyRange.Range("B" & Rows.Count).End(xlUp).Row + 1

'wat gaan we opslaan
titel = titel.Value
jaar = jaar.Value
Auteur = Auteur.Value
trefwoord1 = trefwoord1.Value
trefwoord2 = trefwoord2.Value
trefwoord3 = trefwoord3.Value
trefwoord4 = trefwoord4.Value
If Checkbox1.Checked Then 'DIE = MOET WEG
Checkbox1.Text = "Ja"
Else
Checkbox1.Text = "Nee"
End If
opmerkingen = opmerkingen.Value

'controle dat in ieder geval wel dat het adres en de roepnaam ingevuld worden
If titel = Empty Or trefwoord1 = Empty Then
MsgBox "Voer 'minimaal' titel en 2 trefwoorden in!"
Exit Sub
Else
'waar gaan we het opslaan
MyRange.Range("B" & legeregel) = titel
MyRange.Range("C" & legeregel) = jaar
MyRange.Range("D" & legeregel) = Auteur
MyRange.Range("E" & legeregel) = trefwoord1
MyRange.Range("F" & legeregel) = trefwoord2
MyRange.Range("G" & legeregel) = trefwoord3
MyRange.Range("H" & legeregel) = trefwoord4
MyRange.Range("I" & legeregel) = opmerkingen
MyRange.Range("J" & legeregel) = Checkbox1

'geef nieuwe cellen een rand opmaak
MyRange.Range("A" & legeregel, ("AG" & legeregel)).Borders.LineStyle = xlContinuous

verhaaltoevoegen.Hide

End If

response = MsgBox("Wilt u nog een nieuw verhaal toevoegen?", vbYesNo, Title:="doc opslaan?")
If response = vbNo Then
Unload Me
Else
Unload Me
verhaaltoevoegen.Show
On Error Resume Next
verhaaltoevoegen.Show
On Error GoTo 0
End If
'tegen flikkeren van beeldscherm
Application.ScreenUpdating = True
End Sub

Private Sub knop_annuleer_Click()
'als er op de knop annuleren gedrukt wordt gebeurt dit
If titel = Empty And soort = Empty Then
Me.Hide
Unload Me
Else
response = MsgBox("Weet u zeker dat u de doc niet wilt opslaan?", vbYesNo, Title:="doc opslaan?")
If response = vbYes Then
verhaaltoevoegen.Show
End If
End If

End Sub
 
Dat ziet er nog steeds uit als VB 5 code. In Visual Basic .NET is dat net wat anders, ik denk dat je vooral je Click events voor je buttons en je Form.Load event opnieuw moet klaarzetten en daar je code in zetten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan