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

Controle op twee kolommen? pfffffff

Status
Niet open voor verdere reacties.

Demeter

Verenigingslid
Lid geworden
24 mei 2006
Berichten
1.659
Hallo,

Ben al een tijdje bezig om mbv data vanuit een ingevulde combobox gegevens te laten zien in een userform. Dit lukte tot voor kort aardig tot dat ik op twee kolommen wilde gaan zoeken (achternaam en voornaam ivm voorkomen zelfde achternaam verschillende personen).
Dacht dat dit zou moten lukken door in een bereik te zoeken op de ingevoerde achternaam en met een offset de voornaam te controleren.
Zie code hieronder:

In rood is aangepast na post van Spiderman (thanks).
Code:
Private Sub zoek_Click()
Dim medewerker As Range
Dim MyRange As Range
Dim c As Range
Dim i As Long
Dim stZoekenLinks       As String
Dim stZoekenRechts      As String

Set MyRange = Worksheets("gegevens").Range("A2:A80")

Run "leeg_combobox" 'maakt formulier leeg

'zoeknaam is naam van combobox waar je de naam van de medewerkers selecteerd
'hierin selecteer je de naam van de medewerker, vb: Klaassen, Jan

i = InStr(zoeknaam, ", ") 'naammedewerker delen op de plaats van de komma
stZoekenLinks = [COLOR="Red"]Trim[/COLOR](Left(zoeknaam, i - 1))   'var. Zoeknaam staat links van de komma
stZoekenRechts = [COLOR="red"]Trim[/COLOR](Right(zoeknaam, Len(zoeknaam) - i))  'var. Zoeknaam staat rechts van de komma

For Each c In MyRange
    If c.Value = stZoekenLinks And c.Offset(0, 1).Value = stZoekenRechts Then
        achternaam.Text = Range("A" & c.Row)
        voornaam.Text = Range("B" & c.Row)
        adres.Text = Range("C" & c.Row)
        postcode.Text = Range("D" & c.Row)
        woonplaats.Text = Range("E" & c.Row)
        telefoon.Text = Range("F" & c.Row)
        mobiel.Text = Range("G" & c.Row)
        email.Text = Range("H" & c.Row)
        geboortedatum.Text = Range("I" & c.Row)
        personeelsnr.Text = Range("J" & c.Row)
    End If
Next

End Sub

Dit werkt dus niet, hij geeft ook geen foutmelding dus het klopt wel alleen niet zo kloppend als ik wil.

Iemand enig idee?


Bijvoorbaat dank,
Ferenc
 
Laatst bewerkt:
Titel van je vraag zegt weinig, pas jij hem zelf aan of moet ik het doen? Edit: Goed zo :D
 
Hoi Demeter,

Zet eens een breakpoint na stZoekenRechts = Right(zoeknaam, Len(zoeknaam) - i) 'var. Zoeknaam staat rechts van de komma

Kijken of je dan je (waarschijnlijke) fout ziet :)


Suc6
 
Dit zou het niet moeten zijn, als ik de volgende test code neerzet inplaats van mijn for / next loop, krijg ik netjes de uitkomst in mijn bereik.
Code:
Worksheets("gegevens").Range("A15") = stZoekenLinks
Worksheets("gegevens").Range("B15") = stZoekenRechts

Kan helaas thuis niks testen aangezien ik de code ben vergeten door te sturen.
Maar heb nu wel tijd om even wat anders te doen :) (enemy territory:))


Groet,
Ferenc
 
Hoi Demeter,

Dan probeer deze code maar eens:

Code:
Sub Macro1()
Dim i As Long
Dim stZoekenLinks       As String
Dim stZoekenRechts      As String

Zoeknaam = "Klaassen, Jan"

i = InStr(Zoeknaam, ", ") 'naammedewerker delen op de plaats van de komma
stZoekenLinks = Left(Zoeknaam, i - 1)   'var. Zoeknaam staat links van de komma
stZoekenRechts = Right(Zoeknaam, Len(Zoeknaam) - i)  'var. Zoeknaam staat rechts van de komma

MsgBox "De lengte van " & stZoekenLinks & " = " & Len(stZoekenLinks)
MsgBox "De lengte van " & stZoekenRechts & " = " & Len(stZoekenRechts)
End Sub

Let vooral op Jan = 3 characters lang:)
 
Dat zou ik dan zelf zo onderbouwen:
Code:
Sub Macro1()
Dim i As Long
Dim j As Long
Dim stZoekenLinks       As String
Dim stZoekenRechts      As String

Zoeknaam = "Klaassen, Jan"

i = InStr(Zoeknaam, ",") 'naammedewerker delen op de plaats van de komma
stZoekenLinks = Left(Zoeknaam, i - 1)   'var. Zoeknaam staat links van de komma

j = InStr(Zoeknaam, " ") 'naammedewerker delen op de plaats van de komma
stZoekenRechts = Right(Zoeknaam, Len(Zoeknaam) - j)  'var. Zoeknaam staat rechts van de komma

MsgBox "De lengte van " & stZoekenLinks & " = " & Len(stZoekenLinks)
MsgBox "De lengte van " & stZoekenRechts & " = " & Len(stZoekenRechts)
End Sub

maar dat is nou niet echt een efifciente oplossing, nog meer coderegels. maar werkt wel ;).

Groet,
Ferenc

ps.
:owat bedoel je eigenlijk met breakpoint? :o
 
Hoi Demeter,

Ik zou het zo doen:

Code:
Sub Macro1()
Dim i As Long
Dim stZoekenLinks       As String
Dim stZoekenRechts      As String

Zoeknaam = "Klaassen, Jan"

i = InStr(Zoeknaam, ", ") 'naammedewerker delen op de plaats van de komma
stZoekenLinks = [B][COLOR="Red"]Trim[/COLOR][/B](Left(Zoeknaam, i - 1))   'var. Zoeknaam staat links van de komma
stZoekenRechts = [B][COLOR="red"]Trim[/COLOR][/B](Right(Zoeknaam, Len(Zoeknaam) - i))  'var. Zoeknaam staat rechts van de komma

MsgBox "De lengte van " & stZoekenLinks & " = " & Len(stZoekenLinks)
MsgBox "De lengte van " & stZoekenRechts & " = " & Len(stZoekenRechts)
End Sub

Snap je dat je probleem waarschijnlijk in de spatie zat dus " Jan" I.P.V. "Jan"?

Met de statment Trim worden alle begin en eind spaties verwijderd.

Met een breakpoint bedoel ik het volgende:
Ga maar eens met de cursor naar de regel 'MsgBox "De lengte van " & stZoekenLinks & " = " & Len(stZoekenLinks)'

Druk daar op F9
Je krijgt nu een rode lijn op de plaats.
Als je nu je programma start dan zul je zien dat het programma op die lijn stopt.
Als je nu met de muis bijvoorbeeld op 'Zoeknaam' gaat staan, dan zul je zien dat het programma je de waarde van de variable zoeknaam laat zien (reuze handig met dit soort van problemen).

Met F8 gaat het programma één stap verder, en met F5 gaat het programma helemaal door.
 
Super handig zulke tips. Misschien was ik er zelf achter gekomen als ik ooit een boek had gelezen (over Excel / VBA):o .

Maar werkt als een trein.
Zal morgen direct mijn juiste code hiermee controleren, dan hoor je nog van me.

Thanks, voor de snelle reacties.

Groet,
Ferenc
 
Spiderman bedankt voor je reactie. Ben er nu achter dat hij mede op de spatie vast liep.
Maar ben er nu achter dat mijn range ook niet klopt.
Code:
If c.Value = stZoekenLinks And c.Offset(0, 1).Value = stZoekenRechts Then
        achternaam.Text = [COLOR="Red"]Range("A" & c.Row)[/COLOR]
    End If

Iemand hier een oplossing voor? Zou toch zeggen dat dit het moet doen.


Bedankt,
Ferenc

ps. voor volledge code zie 1e post (aangepast met: trim)
 
Laatst bewerkt:
Ferenc, zou je hier je voorbeeldbestandje kunnen posten? Ik ben namelijk zelf ook met zoiets bezig (zoals je nog wel weet) en ben er nog niet uit. Misschien dat ik daar wat uit kan halen.

Alvast bedankt:thumb:
 
Lipe te klooien met de Range verwijzing, had in het begin mijn MyRange als Worksheets().Range gedefinieer. maar bij het binnen halen van gegevens wordt de Range variabel (je wilt gevens uit verschillende kolommen halen van dezelfde regel).

Hierbij de juiste code:
Code:
Private Sub zoek_Click()
Dim MyRange             As Variant
Dim c                   As Range
Dim i                   As Long
Dim stZoekenLinks       As String
Dim stZoekenRechts      As String

Set MyRange = Worksheets("gegevens")

'tegen flikkeren van beeldscherm
Application.ScreenUpdating = False

'haal de beveiliging van het blad
Sheets("gegevens").Unprotect

'maakt formulier leeg
Run "leeg_combobox"

'zoeknaam is naam van combobox waar je de naam van de medewerkers selecteerd
'hierin selecteer je de naam van de medewerker, vb: Klaassen, Jan

i = InStr(zoeknaam, ", ") 'naammedewerker delen op de plaats van de komma
stZoekenLinks = Trim(Left(zoeknaam, i - 1))   'var. Zoeknaam staat links van de komma
stZoekenRechts = Trim(Right(zoeknaam, Len(zoeknaam) - i))  'var. Zoeknaam staat rechts van de komma

For Each c In MyRange.Range("A2:A80")
    If c = stZoekenLinks And c.Offset(0, 1).Value = stZoekenRechts Then
        achternaam.Text = MyRange.Range("A" & c.Row)
        voornaam.Text = MyRange.Range("B" & c.Row)
        adres.Text = MyRange.Range("C" & c.Row)
        postcode.Text = MyRange.Range("D" & c.Row)
        woonplaats.Text = MyRange.Range("E" & c.Row)
        telefoon.Text = MyRange.Range("F" & c.Row)
        mobiel.Text = MyRange.Range("G" & c.Row)
        email.Text = MyRange.Range("H" & c.Row)
        geboortedatum.Text = MyRange.Range("I" & c.Row)
        personeelsnr.Text = MyRange.Range("J" & c.Row)
    End If
Next

'beveilig blad weer
Sheets("gegevens").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

'tegen flikkeren van beeldscherm
Application.ScreenUpdating = True

End Sub

Groet,
Ferenc
 
Laatst bewerkt:
Spiderman, helemaal gelijk was er zelf ook al achter gekomen dat ik de Range door elkaar heb gehaald.
Thanks voor je reactie, a;tijd een goed gevoel als er mensen met je meedenken :)

Zie hier mijn voorbeeld file.
Zitten nog wel wat foutjes in fout afhandeling, bv in het form bewerkmedewerker en je klikt op wijzigen en er is niks ingevoerd, wordt je formulier afgesloten inplaats van waarschuwing.

Hoor graag als er aanpassingen en / of opmerking op zijn.

Groet,
Ferenc
 

Bijlagen

Laatst bewerkt:
Beste toverkamp op deze manier maak je het niet gemakkelijk voor de mensen die reageren in deze vraag. Als je een vraag heb open dan een eigen topic.

Ik heb al een eigen topic geopent, maar ik was samen met demeter een beetje het zelfde bestand aan het bouwen, dus vandaar. Demeter wist er wel van:cool:
 
Ik heb al een eigen topic geopent, maar ik was samen met demeter een beetje het zelfde bestand aan het bouwen, dus vandaar. Demeter wist er wel van:cool:
Dan vind ik toch dat je samen met demeter in die door jou geopende topic verder gaat. ;)
 
Toverkamp,
Je hebt helemaal gelijk.

Maar tegen de wil van een moderator is niet op te boksen. :)
Gaat ook gebeuren dat we in Toverkamp zijn post verder gaan.

Ferenc
 
Laatst bewerkt:
In plaats van

Code:
Dim MyRange             As Variant
Dim c                   As Range
Dim i                   As Long
Dim stZoekenLinks       As String
Dim stZoekenRechts      As String

Set MyRange = Worksheets("gegevens")

doe je beter

Code:
Dim c                   As Range
Dim i                   As Long
Dim stZoekenLinks       As String
Dim stZoekenRechts      As String

With Worksheets("gegevens")

'de rest van de code

End With

De rest van de code, is dus... de rest van de code ;) , maar wel simpeler gemaakt: overal waar Worksheets("gegevens") staat, laat je dat weg:

Code:
achternaam.Text = .Range("A" & c.Row)
en zo verder gaan...

Remember, End With aan het einde niet vergeten of VBA zal het niet pikken.

Wigi
 
Thanks Wigi,

Das eigenlijk wat ik zocht.
Supper :thumb:

Groet,
Ferenc
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan