• 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.

met VBA zoeken naar een naam in een tabel, ID weergeven

Status
Niet open voor verdere reacties.

Andre175

Gebruiker
Lid geworden
2 feb 2018
Berichten
351
Beste forum leden....

Ik heb een Tabel_Scholen op werkblad "Scholen"

Kolom A = IDSchool
Kolom B = Debiteurnummer
Kolom C = Naam School
Kolom D =.......
enz

en een Tabel_Kinderen op werkblad "Kinderen"

Kolom A = IDKind
Kolom B = Naam
Kolom C = ....
Kolom D = ....
Kolom E = IDSchool

in een Userform wordt de naam van de school mbv een combobox (CbSchool) weer gegeven.
Nu wil ik graag dat naar Tabel_Kinderen het "ID" van de school wordt weg geschreven.

Hoe kan ik mbv een VBA Code het "ID" van de school vinden en weg schrijven.

zat zelf zo te puzzelen, wil echter nog niet echt lukken

Code:
    lr = .Range("B" & Rows.Count).End(xlUp).Row + 1
With sheets("Scholen")
           Sheets("Kinderen").Range("E" & lr) = .Find((CbSchool.Value), LookIn:=xlValues).Offset(, 1).Value
End With
 
Plaats een voorbeeld document.
 
Hallo Edmoor.

Weet dat het voor de helpers makkelijker is als er een voorbeeldbestand bij zit, maar dacht dat mijn vraag zo duidelijk genoeg was.
Alsnog een bestand erbij dan......


Bekijk bijlage Urenlijsten en facturatie volledig .xlsm


Er zitten nog meerdere fouten in het bestand, dat komt omdat ik stap voor stap alles moet uitzoeken en dan soms de opzet weer aan moet passen.:confused:
Ik doe wat ik kan, en dat wordt gelukkig steeds meer.:)


maar oke... als volgt.
op de pagina Scholen staat een listbox... in listbox clicken... textboxen gevuld.
Hier kan het 1 en ander aan worden gepast en mbv comandobutton "Change" worden de wijzigingen doorgevoerd.
Wordt de naam van de school gewijzigd, dan moet uiteraard ook de naam van de school in de Tabel_Kinderen worden aangepast.

Zoals SNB me het al eens heeft gezegd....
Ik wacht wel tot ook jij er achter komt dat het gebruik van het debiteurennummer de meest efficiënte aanpak is.

ik geloof dat hij niet meer hoeft te wachten....
 
Ik begrijp denk ik niet echt je probleem. Aan je code achter de Change knop heb ik eigenlijk niks anders gedaan dan de controle bovenin omgedraaid en de leesbaarheid aangepast. Dit werkt prima:
Code:
Private Sub CmdbChangeSch_Click()
    If LbScholen.ListIndex = -1 Then
        MsgBox "Kies eerst een school!", vbCritical, "School??"
        LbScholen.SetFocus
        Exit Sub
    End If
    
    Set ws = Worksheets("Tabel_Scholen")
    Set rng = [Tabel_Scholen]
    Set fnd = rng.Find(What:=TbIdSch.value, LookIn:=xlValues, LookAt:=xlWhole)
    
    If Not fnd Is Nothing Then
        ws.Cells(fnd.Row, 1).Resize(, 11).value = _
            Array(TbIdSch.value, _
                  TbDebnrSch.value, _
                  TbNaamSch.value, _
                  TbAdresSch.value, _
                  TbHuisnrSch.value, _
                  TbPostcSch.value, _
                  TbPlaatsSch.value, _
                  TbKontPersSch.value, _
                  TbMailSch, _
                  TbTelSch, TbKmSch.value)
    End If
    
    LbScholen.List = [Tabel_Scholen].value
    TbIdDeb.value = WorksheetFunction.Max([IDsSch]) + 1
    Call UserForm_Initialize
End Sub

Omdat je opnieuw de Initialize doet kan het leeg maken achterwege blijven.
 
Laatst bewerkt:
Als een naam van een school wordt gewijzigd op pagina scholen dan gaat alles zoals het moet.
wordt op pagina Huishoudens in de listbox een regel geselcteerd, dan zie je bij het het kind dat de naam van de school ook veranderd is.

wordt er op deze pagina voor een kind een andere school gekozen, dan zal het nieuwe ID voor de school in de Tabel_Kinderen moeten worden weg geschreven.
Dat wil me nog niet lukken.

Code:
Private Sub CmdbChangeKindHH_Click()
    If LbGezinnen.ListIndex = -1 Then
        MsgBox "Kies eerst een gezin!", vbCritical, "Gezin??"
        LbGezinnen.SetFocus
        Exit Sub
    End If
   
    iRow = Sheets("Tabel_Kinderen").Cells.Find(What:=TbId1Hh, SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
    Sheets("Tabel_Kinderen").Cells(iRow, 2).Resize(, 7).value = Array(TbId1Hh.value, TbKind1Hh.value, _
                                                                (TbFamnaam.value & " " & TbStraat.value & " " & TbHuisnr.value & " " & TbPlaats.value), _
                                                                CDate(TbGebdatum1Hh.value), CbSchool1Hh.value, _
                                                                CbJM1Hh.value, TbBijzh1Hh.value)
    If TbId2Hh.Visible = True Then
    iRow = Sheets("Tabel_Kinderen").Cells.Find(What:=TbId2Hh, SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
    Sheets("Tabel_Kinderen").Cells(iRow, 2).Resize(, 7).value = Array(TbId2Hh.value, TbKind2Hh.value, _
                                                                (TbFamnaam.value & " " & TbStraat.value & " " & TbHuisnr.value & " " & TbPlaats.value), _
                                                                CDate(TbGebdatum2Hh.value), CbSchool2Hh.value, _
                                                                CbJM2Hh.value, TbBijzh2Hh.value)
    End If
    If TbId3Hh.Visible = True Then
    iRow = Sheets("Tabel_Kinderen").Cells.Find(What:=TbId3Hh, SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
    Sheets("Tabel_Kinderen").Cells(iRow, 2).Resize(, 7).value = Array(TbId3Hh.value, TbKind3Hh.value, _
                                                                (TbFamnaam.value & " " & TbStraat.value & " " & TbHuisnr.value & " " & TbPlaats.value), _
                                                                CDate(TbGebdatum3Hh.value), CbSchool3Hh.value, _
                                                                CbJM3Hh.value, TbBijzh3Hh.value)
    End If
    If TbId4Hh.Visible = True Then
    iRow = Sheets("Tabel_Kinderen").Cells.Find(What:=TbId4Hh, SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
    Sheets("Tabel_Kinderen").Cells(iRow, 2).Resize(, 7).value = Array(TbId4Hh.value, TbKind4Hh.value, _
                                                                (TbFamnaam.value & " " & TbStraat.value & " " & TbHuisnr.value & " " & TbPlaats.value), _
                                                                CDate(TbGebdatum4Hh.value), CbSchool4Hh.value, _
                                                                CbJM4Hh.value, TbBijzh4Hh.value)
    End If
    MsgBox "De aanpassingen zijn opgeslagen!", vbInformation, "Klaar"
 
End Sub

Deze code moet dus nog worden aangepast zodat in de Tabel_Kinderen de ID wordt gewijzigd van de School waar het kind op zit.
 
Laatst bewerkt:
Dat is gewoon een bijna kopie van hoe het met de scholen gedaan wordt.
 
Nu weet ik zelf niet eens meer waar ik vast liep.....pffff.
Tijd om de ogen maar een dicht te doen en morgen weer fris erover nadenken.

ik kom er op terug nadat ik het nog eens goed doorgenomen heb....de rust nu.

zzzzzzzzzzzzzzzzz......


Edit...
Toch nog klein helder moment.
Bij de Scholen was het simpel de waarde van de Textbox overnemen......
Op de Pagina Huishoudens wordt er geen textbox met het ID van de school weergegeven, alleen de naam.
Hoe kom ik aan het ID van de school?


en nu echt oogjes toe, morgen verder.
 
Laatst bewerkt:
goedemiddag.

In de Tabel_Kinderen had ik voor het bepalen van de school- en familienaam een formule gezet, VERT.ZOEKEN(....) om zo de juiste namen in de tabel te krijgen.
Echter wanneer er wijzigingen op pagina Huishoudens worden doorgevoerd, bijvoorbeeld een andere school voor een kind, dan wordt de formule VERT.ZOEKEN overschreven.

Het lijkt me dus beter om geen formules te gebruiken in de tabellen maar de waardes mbv VBA weg te schrijven.

Voor het opslaan van wijzigingen betreffende het kind op pagina Huishoudens heb ik de code iets aangepast tov het bestand wat in #3 staat.

Code:
Private Sub CmdbChangeKindHH_Click()
    If LbGezinnen.ListIndex = -1 Then
        MsgBox "Kies eerst een gezin!", vbCritical, "Gezin??"
        LbGezinnen.SetFocus
        Exit Sub
    End If
   
    iRow = Sheets("Tabel_Kinderen").Cells.Find(What:=TbId1Hh, SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
    Sheets("Tabel_Kinderen").Cells(iRow, 2).Resize(, 8).value = Array(TbId1Hh.value, TbKind1Hh.value, _
                                                                TbFamnaam.value, _
                                                                CDate(TbGebdatum1Hh.value), CbSchool1Hh.value, _
                                                                CbJM1Hh.value, TbBijzh1Hh.value, TbIDgezin.value)
    If TbId2Hh.Visible = True Then
    iRow = Sheets("Tabel_Kinderen").Cells.Find(What:=TbId2Hh, SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
    Sheets("Tabel_Kinderen").Cells(iRow, 2).Resize(, 8).value = Array(TbId2Hh.value, TbKind2Hh.value, _
                                                                TbFamnaam.value, _
                                                                CDate(TbGebdatum2Hh.value), CbSchool2Hh.value, _
                                                                CbJM2Hh.value, TbBijzh2Hh.value, TbIDgezin.value)
    End If
    If TbId3Hh.Visible = True Then
    iRow = Sheets("Tabel_Kinderen").Cells.Find(What:=TbId3Hh, SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
    Sheets("Tabel_Kinderen").Cells(iRow, 2).Resize(, 8).value = Array(TbId3Hh.value, TbKind3Hh.value, _
                                                                TbFamnaam.value, _
                                                                CDate(TbGebdatum3Hh.value), CbSchool3Hh.value, _
                                                                CbJM3Hh.value, TbBijzh3Hh.value, TbIDgezin.value)
    End If
    If TbId4Hh.Visible = True Then
    iRow = Sheets("Tabel_Kinderen").Cells.Find(What:=TbId4Hh, SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
    Sheets("Tabel_Kinderen").Cells(iRow, 2).Resize(, 8).value = Array(TbId4Hh.value, TbKind4Hh.value, _
                                                                TbFamnaam.value, _
                                                                CDate(TbGebdatum4Hh.value), CbSchool4Hh.value, _
                                                                CbJM4Hh.value, TbBijzh4Hh.value, TbIDgezin.value)
    End If
    MsgBox "De aanpassingen zijn opgeslagen!", vbInformation, "Klaar"
 
End Sub

Nu moet alleen nog het ID van de school nog weg worden geschreven in kolom J van de Tabel_Kinderen.
Het ID van de school staat niet in een textbox oid, wel de naam van de school.

hoe moet onderstaande code afgemaakt worden zodat ID school in kolom J komt?
Code:
iRow = Sheets("Tabel_Kinderen").Cells.Find(What:=TbId1Hh, SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).Row
    Sheets("Tabel_Kinderen").Cells(iRow, 2).Resize(, 9).value = Array(TbId1Hh.value, TbKind1Hh.value, _
                                                                TbFamnaam.value, _
                                                                CDate(TbGebdatum1Hh.value), CbSchool1Hh.value, _
                                                                CbJM1Hh.value, TbBijzh1Hh.value, TbIDgezin.value, [COLOR="#FF0000"]....................[/COLOR])


Bekijk bijlage Urenlijsten en facturatie volledig .xlsm
 
Ik heb een nieuwe vraag gesteld op dit Forum met een stuk kleiner voorbeeldbestand
.... als die vraag beantwoord kan worden, denk ik dat ik deze vraag wel zelf op kan losssen


klik hier voor de andere vraag
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan