Checkbox waarde weergeven in Userform

Status
Niet open voor verdere reacties.

btr200bhp

Gebruiker
Lid geworden
6 mrt 2010
Berichten
16
Ik heb een userform gemaakt waar ik gegevens kan invoeren en opslaan in een excellijst.
Ook staat de ingevoerde gegevens in een lijst (listbox) nadat ik ze opgeslagen heb.
Nu kan ik met dubbelklik in die lijst de gegevens weergeven in de invoervelden om ze te wijzigen.
Met textbox geen probleem, werkt perfect.

Maar ik loop vast bij de checkbox.
Invoeren werkt, aangevinkt geeft waarde "Ja" weer in de excellijst en als niet aangevinkt "Nee"
Alleen het weergeven van excel naar userform lukt me niet.
Daar wordt iedere checkbox aangevinkt.
Heb al geprobeerd me leeg veld ipv "Nee" maar ook zelfde resultaat.

Om de gegevens op te roepen gebruik ik onderstaande VBA code

Code:
Private Sub lbxLadenLijst_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

 Me.tbxLadenFirma.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 1)
    Me.tbxLadenAdres.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 2)
    Me.tbxLadenPostcode.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 3)
    Me.tbxLadenPlaats.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 4)
    Me.tbxLadenLand.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 5)

End Sub

Dit is enkel Textbox en werkt perfect

Hier het knel punt:
Code:
Me.chkLadenEuro.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 9)
Me.chkLadenOneway.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 10)
Me.chkLadenIP.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 11)
Me.chkLadenOverige.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 12)

Hier staat BV (in kolom 9-10-11-12): Ja - Nee - Ja - Nee
Dit geeft checkbox dus weer als een vinkje (TRUE)

Mijn vraag is dus of het mogelijk is om bij waarde Ja de checkbox op TRUE te zetten en bij Nee op FALSE

Heb al geprobeerd om een If - Then erop los te laten maar dan zegt VBA dat ik een fout heb gemaakt.

Code:
If Me.lbxLadenLijst.Value(Me.lbxLadenLijst.ListIndex, 9) = "Ja" Then
        Me.chkLadenEuro.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 9)
End If

Youtube brengt mij in ieder geval geen oplossing en Google weet blijkbaar ook niet alles (kuch kuch)

Alvast bedankt voor jullie hulp.
 
Geen voorbeeld document, dus dit is algemeen.
Een CheckBox heeft nooit een tekst- of numerieke waarde, alleen een Boolean (True of False)
Waar jij het over hebt met Ja of Nee, is de Caption eigenschap van een CheckBox.

Controleer of de CheckBox is aangevinkt:
Code:
If ChecBox1 Then
    [COLOR="#008000"]'Doe je ding[/COLOR]
Else
    [COLOR="#008000"]'Doe wat anders[/COLOR]
End If

Controleer of een Checkbox NIET is aangevinkt:
Code:
If Not CheckBox1 Then
    [COLOR="#008000"]'Doe je ding[/COLOR]
Else
    [COLOR="#008000"]'Doe wat anders[/COLOR]
End If

Vink een CheckBox aan:
Code:
CheckBox1 = True

Vink een CheckBox uit:
Code:
CheckBox1 = False

Dit stukje:
Code:
If Me.lbxLadenLijst.Value(Me.lbxLadenLijst.ListIndex, 9) = "Ja" Then
        Me.chkLadenEuro.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 9)
End If

Kan je dus zo schrijven:
Code:
Me.chkLadenEuro = Me.lbxLadenLijst.Value(Me.lbxLadenLijst.ListIndex, 9) = "Ja"
 
Laatst bewerkt:
Heb kopie van het bestand toegevoegd en de bestandsgegevens neutraal gemaakt.
Ben nog in de opbouwfase met dit project dus niet alles werkt.
Ter info: Heb een voorbeeld op youtube gevonden en ben hiermee an de slag gegaan door mijn gegevens te gebruiken.
Moet eerlijk zeggen dat ik de VBA logica wel begrijp wat de regels doen. (Beetje het oude Basic van vroeger principe)
Geprobeerd om de tips die u gaf te gebruiken maar ik doe toch nog steeds iets verkeerd.
Gaat zich hier om tab Laden in het userform.

In tab Lossen heb ik soortgelijk als optionbutton.
Deze wil ik op dezelfde manier gaan gebruiken.
Als ik de correcte regel voor optionbutton al heb, ben ik geholpen.
Deze staat nog niet in VBA erbij trouwens.
Ik werk van Sub naar Sub en ga deze eerst testen voor ik met de volgende begin.
 

Bijlagen

Kijk in lbxLadenLijst_DblClick.
Daar heb je niet gedaan wat ik schreef bij: Kan je dus zo schrijven.
Tevens verwijs je naar kolommen in je listbox die er niet zijn.
 
Laatst bewerkt:
Het lukt me dus gewoon niet.
Heb die regel tig keer geprobeerd maar krijg steeds weer foutmelding 13 terug: type komen niet met elkaar overeen
Waar komt die regel nu in deze sub?
Nee, ik vraag niet om het voor te kauwen hoor, maar wil wel begrijpen wat ik fout doe en wat de script doet als het wel goed is.
Zeker omdat ik deze nog vaker wil toepassen.
Makkelijke weg om voor iedere waarde te wisselen naar textbox leer ik nog minder van.

Die kolommen in mijn listbox (9 tm 12) staan in VBA op nul pixels en dus niet zichtbaar in de userform.
Dit bij vervoerders ook gedaan en krijg ik de data uit die kolommen te zien in mijn linker veld.
 
Maak er dan eens dit van in lbxLadenLijst_DblClick:
Code:
Me.chkLadenEuro.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 9) = "Ja"
Me.chkLadenOneway.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 10) = "Ja"
Me.chkLadenIP.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 11) = "Ja"
Me.chkLadenOverige.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 12) = "Ja"
Dat is zoals ik het liet zien.
Test ID 20154 en 20155.
 
En nu zoals het hoort:
Eigenschappen (bijv. van de listboxen) leg je vast in de ontwerpmodus, niet in VBA-code.
'Call' is al meer dan 2 decennia overbodig.
Rowsource is voor jouw doel niet geschikt.
De eigenschap .List daarentegen wel; dan is meteen .clear overbodig.
De code kan wat korter.

Code:
Private Sub UserForm_Initialize()
    With cbxVerSorteer
        .List = Split("Firma Plaats Land")
        cbxLadenSorteer.List = .List
        cbxLossenSorteer.List = .List
    End With

    for j=1 to 3
     me("lbx" & choose(j,"Ver","Laden","Lossen") &" Lijst").List = Sheets(choose(j,"Vervoerder","Laadplaatds","Losplaats")).Cells(1).CurrentRegion.Value
    next
End Sub
 
Laatst bewerkt:
Maak er dan eens dit van in lbxLadenLijst_DblClick:
Code:
Me.chkLadenEuro.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 9) = "Ja"
Me.chkLadenOneway.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 10) = "Ja"
Me.chkLadenIP.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 11) = "Ja"
Me.chkLadenOverige.Value = Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 12) = "Ja"
Dat is zoals ik het liet zien.
Test ID 20154 en 20155.

Dankjewel, dit werkt goed.
Als ik het goed begrijp, geeft de ="Ja" opdracht om de checkbox op TRUE te zetten.

Heb deze regel ook toegepast op de optionbuttons door zelfde regel 4x te plaatsen met de ="waarde" er achter.
De radiobutton met die waarde staat dan op TRUE.
 
En nu zoals het hoort:
Eigenschappen (bijv. van de listboxen) leg je vast in de ontwerpmodus, niet in VBA-code.
'Call' is al meer dan 2 decennia overbodig.
Rowsource is voor jouw doel niet geschikt.
De eigenschap .List daarentegen wel; dan is meteen .clear overbodig.
De code kan wat korter.

Code:
Private Sub UserForm_Initialize()
    With cbxVerSorteer
        .List = Split("Firma Plaats Land")
        cbxLadenSorteer.List = .List
        cbxLossenSorteer.List = .List
    End With

    for j=1 to 3
     me("lbx" & choose(j,"Ver","Laden","Lossen") &" Lijst").List = Sheets(choose(j,"Vervoerder","Laadplaatds","Losplaats")).Cells(1).CurrentRegion.Value
    next
End Sub

Ik ga deze zeker proberen in mijn voorbeeld file, heb namelijk al eens eerder problemen gehad met de RowSource (foutmelding) maar werkt voor nu goed.
Voorbeeld-file pas ik ook gelijk aan samen met het originele voor het geval ik jullie hulp weer nodig heb.

VBA ben ik pas sinds kort serieus mee aan de slag, heb me tot nu toe altijd kunnen helpen zonder maar merk gaandeweg dat de mogelijkheden met VBA echt veel beter zijn.
 
Als ik het goed begrijp, geeft de ="Ja" opdracht om de checkbox op TRUE te zetten.
Nee.
De afvraging Me.lbxLadenLijst.List(Me.lbxLadenLijst.ListIndex, 12) = "Ja" levert een boolean waarde True of False op.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan