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

Gegevens opvragen vba

Status
Niet open voor verdere reacties.

toverkamp

Gebruiker
Lid geworden
11 sep 2006
Berichten
403
Is het mogelijk om met een formulier gegevens op te vragen uit een ander tabblad. De bedoeling is het volgende:
Ik heb al een formulier en voer daar het filiaalnummer in. Wanneer ik dan op de butten "haal gegevens op" druk, moeten de volgende gegevens te voorschijn komen:
-naam
-adres
-plaats
 
Ja, dit is mogelijk.

Als je dit manueel doet in Excel, doe je Bewerken > Zoeken. In VBA doe je hetzelfde, de Find methode gebruiken dus, maar moet je het wel programmeren. De helpfiles in VBA hebben een uitgewerkt voorbeeld met de code. Pas dit een beetje aan en je hebt het.

Wigi
 
Ja, dit is mogelijk.

Als je dit manueel doet in Excel, doe je Bewerken > Zoeken. In VBA doe je hetzelfde, de Find methode gebruiken dus, maar moet je het wel programmeren. De helpfiles in VBA hebben een uitgewerkt voorbeeld met de code. Pas dit een beetje aan en je hebt het.

Wigi

Waar zoek je op in de helpfile, ik heb het namelijk niet kunnen vinden? Het volgende is precies de bedoeling:
Private Sub haalgegevensop_Click()

'waarvandaan gaan we het ophalen
'de gegevens moeten opgehaald worden vanuit het werkblad: database filiaal
'Excel moet in kolom E hetzelfde filiaalnummer vinden wat in gegfililnummer is ingevuld

Worksheets("database filiaal").Find ("E" & gegfiliaalnummer)

'wanneer dit is gevonden moeten de volgende gegevens worden gepresenteerd in:
'gegnaamfiliaal = hierin de naam van filiaal
'gegadresfiliaal = hierin adres van filiaal
'gegplaatsfiliaal = hierin plaats van filiaal
'geglandfiliaal = hierin het land van het filiaal

End Sub
 
Zoek op FindNext en gebruik de macro aldaar.

dat is niet helemaal wat ik zoek. In de bijlage vindt je een printscreane van het formulier. Wanneer je het filiaalnummer hebt ingevuld en klikt op de button, dan moeten de gegevens in de onderstaande velden komen te staan. Die gegevens moeten worden opgehaald uit het werkblad: database filiaal
 

Bijlagen

  • haal gegevens op.JPG
    haal gegevens op.JPG
    18,9 KB · Weergaven: 143
dat is niet helemaal wat ik zoek.

Oh ja, toch wel. De Find methode gebruiken is hier het beste, believe me.

Zoek gewoon in het andere tabblad op filiaalnummer, en haal de gegevens uit dezelfde rij op. En klaar is kees.
 
Oh ja, toch wel. De Find methode gebruiken is hier het beste, believe me.

Zoek gewoon in het andere tabblad op filiaalnummer, en haal de gegevens uit dezelfde rij op. En klaar is kees.

ik heb het voorbeeld van de helpfile gekopieerd en veranderd en kom dan tot het volgende:

With Worksheets("database filiaal").Range("e5:e500")
Set filiaalnummer = .Find(gegfiliaalnummer, LookIn:=xlValues)
If Not filiaalnummer Is Nothing Then
filiaalnummer = gegfiliaalnummer
Do
filiaalnummer.Interior.Pattern = xlPatternGray50
filiaalnummer = gegfiliaalnummer
Loop While Not filiaalnummer Is Nothing And filiaalnummer <> gegfiliaalnummer
End If
End With

Dit werkt niet. Er zullen ongetwijfeld fouten in zitten. Maar ik snap de code eigenlijk ook niet helemaal. Kan iemand mij wat hier over uitleggen?
 
misschien is het iets duidelijker met de bijlage erbij.
Het gaat om de knop: voeg filiaal toe.
En de daarbijbehorende formulier: gegevensfiliaalformulier
Het tabblad waarin gezocht moet worden is: database filiaal
 

Bijlagen

Code:
Private Sub haalgegevensop_Click()
Dim filiaalnummer As Range

With Worksheets("database filiaal")
    Set filiaalnummer = .Range("E5:E500").Find(Val(gegfiliaalnummer.Text), LookIn:=xlValues, lookat:=xlWhole)
    If Not filiaalnummer Is Nothing Then
        gegnaamfiliaal.Text = .Range("B" & filiaalnummer.Row)
        gegadresfiliaal.Text = .Range("C" & filiaalnummer.Row)
        gegplaatsfiliaal.Text = .Range("D" & filiaalnummer.Row)
        geglandfiliaal.Text = .Range("F" & filiaalnummer.Row)
        gegaantalkassasfiliaal.Text = .Range("G" & filiaalnummer.Row)
        gegaantalcounterladesfiliaal.Text = .Range("H" & filiaalnummer.Row)
    End If
End With
End Sub

Wigi
 
Code:
Private Sub haalgegevensop_Click()
Dim filiaalnummer As Range

With Worksheets("database filiaal")
    Set filiaalnummer = .Range("E5:E500").Find(Val(gegfiliaalnummer.Text), LookIn:=xlValues, lookat:=xlWhole)
    If Not filiaalnummer Is Nothing Then
        gegnaamfiliaal.Text = .Range("B" & filiaalnummer.Row)
        gegadresfiliaal.Text = .Range("C" & filiaalnummer.Row)
        gegplaatsfiliaal.Text = .Range("D" & filiaalnummer.Row)
        geglandfiliaal.Text = .Range("F" & filiaalnummer.Row)
        gegaantalkassasfiliaal.Text = .Range("G" & filiaalnummer.Row)
        gegaantalcounterladesfiliaal.Text = .Range("H" & filiaalnummer.Row)
    End If
End With
End Sub

Wigi

Wigi, hardstikke bedankt:thumb:
Kun je misschien uitleggen hoe de code precies werkt? Ik heb bijna nog nooit met vba gewerkt, maar ik vind 't hardstikke mooi werken!
 
Het filiaalnummer wordt opgezocht.

Als het gevonden wordt krijgt de variabele filiaalnummer de cel waarin het gevonden werd. filiaalnummer.Row is dan de rij. Uit die rij, in diverse kolommen, halen we de gegevens op en zetten die in de tekstboxen.

Studeren, mijn vriend, studeren ... :cool:

Wigi
 
Met de code in het rood wordt je adresdata gesplitst en in de juiste velden ingevuld.

Code:
Private Sub haalgegevensop_Click()
Dim filiaalnummer   As Range
[COLOR="red"]Dim i               As Long
Dim stAdrress       As String
Dim stName          As String[/COLOR]

With Worksheets("database filiaal")
    Set filiaalnummer = .Range("E5:E500").Find(Val(gegfiliaalnummer.Text), LookIn:=xlValues, lookat:=xlWhole)
    If Not filiaalnummer Is Nothing Then
        gegnaamfiliaal.Text = .Range("B" & filiaalnummer.Row)
        
[COLOR="Red"]        i = InStr(.Range("C" & filiaalnummer.Row), " ") ' cel delen op de plaats van de spatie
        stAdres = Left(.Range("C" & filiaalnummer.Row), i - 1) 'var. stAdres staat links van de spatie
        stHuisnr = Right(.Range("C" & filiaalnummer.Row), Len(.Range("C" & filiaalnummer.Row)) - i) 'var stHuisnr staat rechts van de spatie
        gegadresfiliaal.Text = stAdres
        geghuisnrfiliaal.Text = stHuisnr[/COLOR]
        
        gegplaatsfiliaal.Text = .Range("D" & filiaalnummer.Row)
        geglandfiliaal.Text = .Range("F" & filiaalnummer.Row)
        gegaantalkassasfiliaal.Text = .Range("G" & filiaalnummer.Row)
        gegaantalcounterladesfiliaal.Text = .Range("H" & filiaalnummer.Row)
    End If
End With
End Sub


Groet,
Ferenc

ps.
je kan natuurlijk ook een kolom invoegen en je code daarop aanpassen.
weet niet hoeveel regels je al hebt van filialen.
 
Laatst bewerkt:
Met de code in het rood wordt je adresdata gesplitst en in de juiste velden ingevuld.

Code:
Private Sub haalgegevensop_Click()
Dim filiaalnummer   As Range
[COLOR="red"]Dim i               As Long
Dim stAdrress       As String
Dim stName          As String[/COLOR]

With Worksheets("database filiaal")
    Set filiaalnummer = .Range("E5:E500").Find(Val(gegfiliaalnummer.Text), LookIn:=xlValues, lookat:=xlWhole)
    If Not filiaalnummer Is Nothing Then
        gegnaamfiliaal.Text = .Range("B" & filiaalnummer.Row)
        
[COLOR="Red"]        i = InStr(.Range("C" & filiaalnummer.Row), " ") ' cel delen op de plaats van de spatie
        stAdres = Left(.Range("C" & filiaalnummer.Row), i - 1) 'var. stAdres staat links van de spatie
        stHuisnr = Right(.Range("C" & filiaalnummer.Row), Len(.Range("C" & filiaalnummer.Row)) - i) 'var stHuisnr staat rechts van de spatie
        gegadresfiliaal.Text = stAdres
        geghuisnrfiliaal.Text = stHuisnr[/COLOR]
        
        gegplaatsfiliaal.Text = .Range("D" & filiaalnummer.Row)
        geglandfiliaal.Text = .Range("F" & filiaalnummer.Row)
        gegaantalkassasfiliaal.Text = .Range("G" & filiaalnummer.Row)
        gegaantalcounterladesfiliaal.Text = .Range("H" & filiaalnummer.Row)
    End If
End With
End Sub


Groet,
Ferenc

ps.
je kan natuurlijk ook een kolom invoegen en je code daarop aanpassen.
weet niet hoeveel regels je al hebt van filialen.

Om eerlijk te zijn, ik zou het adres niet splitsen. Ga je dat ooit afzonderlijk nodig hebben?

Bv. het heeft toch geen zin om "de gemiddelde huisnummer" of "de som van de huisnummers" te berekenen. Laat ze dus bij elkaar staan. Dis is geen kritiek, ik zou dat gewoon niet splitsen. Het bespaart je zelfs een TextBox en een extra kolom uit.

Wigi
 
Laatst bewerkt:
By the way, Ferenc,

heb je eraan gedacht dat er meer dan 1 spatie kan voorkomen in het adres? :eek:

Wigi
 
Wigi,

Ik geef je gelijk, alleen kon het niet laten om het te proberen aangezien de textbox daar al was :). en het is nog gelukt ook.

Hierna kon ik net zo goed de code posten zodat iemand anders er ook van kan leren hoe je een var. kan splitsen.


Groet,
Ferenc
 
Noop niet aangedacht, maar er zou ook een ander teken in kunnen staan of misschien wel meerdere tekens. gaat meer om het idee hoe te beginnen met splitsen.

Groet,
Ferenc
 
Noop niet aangedacht, maar er zou ook een ander teken in kunnen staan of misschien wel meerdere tekens. gaat meer om het idee hoe te beginnen met splitsen.

Groet,
Ferenc

Jep sure. Sommigen kunnen het wellicht gebruiken.

InStr is inderdaad een handige functie.

Wigi
 
Ik heb geprobeerd de formulie iets te wijzen door niet alleen te zoeken op filiaalnummer, maar ook op naam van filiaal. Dan kom ik tot de volgende formule:

Private Sub haalgegevensop_Click()
Dim filiaalnummer As Range
Dim naamfiliaal As Range

With Worksheets("database filiaal")
Set filiaalnummer = .Range("F5:F500").Find(Val(gegfiliaalnummer.Text), LookIn:=xlValues, lookat:=xlWhole)
Set naamfiliaal = .Range("B5:B500").Find(Val(gegnaamfiliaal.Text), LookIn:=xlValues, lookat:=xlWhole)
If Not filiaalnummer And naamfiliaal Is Nothing Then
gegadresfiliaal.Text = .Range("C" & filiaalnummer.Row)
gegadresfiliaal.Text = .Range("C" & naamfiliaal.Row)
gegplaatsfiliaal.Text = .Range("D" & filiaalnummer.Row)
gegplaatsfiliaal.Text = .Range("D" & naamfiliaal.Row)
gegpostcodefiliaal.Text = .Range("E" & filiaalnummer.Row)
gegpostcodefiliaal.Text = .Range("E" & naamfiliaal.Row)
geglandfiliaal.Text = .Range("G" & filiaalnummer.Row)
geglandfiliaal.Text = .Range("G" & naamfiliaal.Row)
gegaantalkassasfiliaal.Text = .Range("H" & filiaalnummer.Row)
gegaantalkassasfiliaal.Text = .Range("H" & naamfiliaal.Row)
gegaantalcounterladesfiliaal.Text = .Range("I" & filiaalnummer.Row)
gegaantalcounterladesfiliaal.Text = .Range("I" & naamfiliaal.Row)
End If
End With
End Sub

bij deze formule wordt een foutmelding gegeven, de fout zit 'm in de volgende regel volgens mij:
gegadresfiliaal.Text = .Range("C" & naamfiliaal.Row) + de andere rijen met naamfiliaal.Row
 
Ben niet 100% zeker, maar als er tekst staat in gegnaamfiliaal.Text, is Val(gegnaamfiliaal.Text) nonsens.

Wigi
 
Ben niet 100% zeker, maar als er tekst staat in gegnaamfiliaal.Text, is Val(gegnaamfiliaal.Text) nonsens.

Wigi

Er staat inderdaad tekst in, dus ik heb de formule nu veranderd in:
Set naamfiliaal = .Range("B5:B500").Find((gegnaamfiliaal.Text), LookIn:=xlValues, lookat:=xlWhole)
Excel geeft nu de foutmelding in de volgende regel:
If Not filiaalnummer And naamfiliaal Is Nothing Then
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan