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

vlookup in VBA

Status
Niet open voor verdere reacties.

bvierhout

Gebruiker
Lid geworden
11 sep 2009
Berichten
9
Hoi allemaal,

Van dit forum heb ik een macro gehaald en zelf ge-edit. Alles werkt, maar het lukt me niet om in de macro een werkende vlookup te bouwen (zie 4de regel van onderen in de macro). Het rare is dat de formule wel netjes in excel komt te staan, maar vervolgens niet de waarde geeft dit hij moet geven. De formule geeft de foutmedling #naam?. Echter als ik de geplaatste formule in excel aanklik en op enter druk doet hij het wel. Dus de formule die de macro plaatst is goed, maar hij voert hem niet gelijk uit? Iemand enig idee wat er aan de hand is?

Macro:
Private Sub UserForm_Initialize()
Datum.Value = ""
Naam.Value = ""
Langhaar.Value = ""
Product1.Value = ""
Product2.Value = ""
Product3.Value = ""
Product4.Value = ""
Product5.Value = ""
Product6.Value = ""
Product7.Value = ""
Product8.Value = ""
Product9.Value = ""
Product10.Value = ""
Datum.SetFocus
End Sub

Private Sub cmdOK_Click()
Dim x As Long, y As Long, z As Long
x = Cells(Rows.Count, "A").End(xlUp).Row + 1 '1e lege cel in A
y = Cells(Rows.Count, "B").End(xlUp).Row + 1 '1e lege cel in B
z = Cells(Rows.Count, "C").End(xlUp).Row + 1 '1e lege cel in C

ActiveWorkbook.Sheets("Invoer").Activate
Range("B5").Select
Do
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
ActiveCell.Offset(0, 0) = Format(Datum.Value, "dd-mm-yy")
ActiveCell.Offset(0, 1) = Naam.Value
ActiveCell.Offset(0, 2) = Langhaar.Value
ActiveCell.Offset(0, 4) = Product1.Value
ActiveCell.Offset(0, 5) = Product2.Value
ActiveCell.Offset(0, 6) = Product3.Value
ActiveCell.Offset(0, 7) = Product4.Value
ActiveCell.Offset(0, 8) = Product5.Value
ActiveCell.Offset(0, 9) = Product6.Value
ActiveCell.Offset(0, 10) = Product7.Value
ActiveCell.Offset(0, 11) = Product8.Value
ActiveCell.Offset(0, 12) = Product9.Value
ActiveCell.Offset(0, 13) = Product10.Value
Range("E" & z).Formula = "=IF(RC[-1]=""kort haar"",VLOOKUP(RC[+1],Prijslijst!A:B,2,False),"""")"
Range("A" & x).Formula = "=MONTH(RC[1])"
Range("A1").Select
End Sub
 
bvierhout,

Gebruik voortaan als je code plaatst de # hier boven.
Je selecteerd de code en dan klik je op #.

Een voorbeeld is vaak makkelijker dan de vraag.
Kun je dit niet oplossen met een formule?
B.V.B. Vert.Zoeken
 
bvierhout,

Maak dit van je code dan doet hij het wel.
Code:
[E:E,Z:Z] = "=IF(RC[-1]=""kort haar"",VLOOKUP(RC[+1],Prijslijst!A:B,2,False),"""")"
[A:A,X:X] = "=MONTH(RC[1])"
 
Laatst bewerkt:
Code:
Private Sub UserForm_Initialize()
Datum.Value = ""
Naam.Value = ""
Langhaar.Value = ""
Product1.Value = ""
Product2.Value = ""
Product3.Value = ""
Product4.Value = ""
Product5.Value = ""
Product6.Value = ""
Product7.Value = ""
Product8.Value = ""
Product9.Value = ""
Product10.Value = ""
Datum.SetFocus
End Sub

is volledig overbodig.
Als 'Datum' als eigenschap 'tabindex' 0 heeft begint de cursor altijd bij 'Datum' als het scherm wordt geladen.

En vermijd select en activate in VBA-code

Code:
  With Sheets("Invoer").cells(rows.count,2)
     for j=0 to 13
        if j<3 then 
          .offset(,j)=choose(j+1,Format(Datum.Value, "dd-mm-yy"),Naam.value,langhaar.value)
        Else
         .offset(,j)=Me("Product" & j-2).value
        End if
     next
  end with
vervangt

Code:
Dim x As Long, y As Long, z As Long
x = Cells(Rows.Count, "A").End(xlUp).Row + 1 '1e lege cel in A
y = Cells(Rows.Count, "B").End(xlUp).Row + 1 '1e lege cel in B
z = Cells(Rows.Count, "C").End(xlUp).Row + 1 '1e lege cel in C

ActiveWorkbook.Sheets("Invoer").Activate
Range("B5").Select
Do
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select
End If
Loop Until IsEmpty(ActiveCell) = True
ActiveCell.Offset(0, 0) = Format(Datum.Value, "dd-mm-yy")
ActiveCell.Offset(0, 1) = Naam.Value
ActiveCell.Offset(0, 2) = Langhaar.Value
ActiveCell.Offset(0, 4) = Product1.Value
ActiveCell.Offset(0, 5) = Product2.Value
ActiveCell.Offset(0, 6) = Product3.Value
ActiveCell.Offset(0, 7) = Product4.Value
ActiveCell.Offset(0, 8) = Product5.Value
ActiveCell.Offset(0, 9) = Product6.Value
ActiveCell.Offset(0, 10) = Product7.Value
ActiveCell.Offset(0, 11) = Product8.Value
ActiveCell.Offset(0, 12) = Product9.Value
ActiveCell.Offset(0, 13) = Product10.Value
Range("A1").Select
 
Laatst bewerkt:
Beste Hoornvan,

Wat een super snelle reactie! Bedankt!
Jouw code werkt volgens mij ook niet.
Heb document toegevoegd.
Ik wil bereiken dat nadat de gebruiker in het vulfomulier de gegevens heeft ingevuld. Hij op basis van de gekozen producten het totaalbedrag in kolom E neerzet. Ik dacht dit op te lossen met een lange (10 producten) if/vlookup formule. Echter geeft hij niet het bedrag weer. (test het zelf maar)
Hoe kan ik dit oplossen?
alvast bedankt
MVG
Bas Vierhout

p.s. kies wel kort haar met invullen, want daarop is momenteel de formule gebaseerd.
 

Bijlagen

bvierhout,

Heb je de code van snb gezien en geprobeerd?
Die code is behoorlijk kort en zou moeten werken.
 
Die zit ik nu te bekijken, maar gaat niet over mijn probleem. Erg handig om te zien dat de code een stuk korter kan, maar ik was al blij dat alles tot nu toe werkte.
Even voor de duidelijkheid: ik zit op het niveau knippen en plakken. Dus kan niet schrijven en een klein beetje lezen.
Maw die verkorting van code ga ik zeker bekijken. Kan ik weer wat leren. Maar als het mogelijk is toch nog een oplossing voor mijn opzet om het totaal uit te laten rekenen via de macro.

Merci
 
Beste Hoorvan,

Nogmaals bedankt voor het kijken. Het bereik is het niet. Ik snap dat ik dit moet aanpassen als ik lang haar ook de formule ga betrekken.

Mijn probleem is dat de marco wel een goede formule in de cel zet, maar niet gelijkt uitrekend. Als je 1x zelf iets invoert via het vulformulier (knop links boven) dan zie je wat ik bedoel. Als hij het bij jou wel gelijk uitrekend dan heeft het te maken met mij excel instellingen, want de formule is goed. Weet alleen niet of dit aan de macro ligt (heb ik veel te weinig kennis voor)
 
bvierhout,

Je moet hem natuurlijk wel vertellen dat hij al deze dingen (prijzen) moet optellen.
Ik heb de eerste 2 items op laten tellen, bedoel je het dan zo?

Code:
=ALS(D6="kort haar";VERT.ZOEKEN(F6;Prijslijst!A1:C26;2;0);"")+VERT.ZOEKEN(G6;Prijslijst!A1:C26;2;0)
 
Laatst bewerkt:
Heren,

Excusses voor het misschien onduidelijk uitleggen.
Laatste poging:
Het gaat NIET om de formule. Die zijn allemaal goed.
De macro zet na de invoer een formule in een cel. De formule geeft echter de foutmelding #naam?. Als ik nu dubbelklik op de cel om de verwijzingen te zien en dan op enter druk, geef de formule wel de juiste uitkomst. Aangezien je hiermee aantoont dat de formule wel werkt, waarom rekent hij het niet in eerste instantie uit?

Zie printscreen 1 t/m 3
 

Bijlagen

  • 1_foutmelding.jpg
    1_foutmelding.jpg
    25,9 KB · Weergaven: 81
  • 2_dubbelklik.jpg
    2_dubbelklik.jpg
    32 KB · Weergaven: 66
  • 3_waarde.jpg
    3_waarde.jpg
    23,1 KB · Weergaven: 64
bvierhout,

Dit is toch het bereik Prijslijst!A1:C26;2;0 zoals je het normaal schrijft?
Jij schrijft het als Prijslijst!A:B ,2,Onwaar
Of is er tegenwordig een andere benadering hier voor?
trucker10 heft het bereik een naam gegeven.
 
Laatst bewerkt:
Heren,

Excusses voor het misschien onduidelijk uitleggen.
Laatste poging:
Het gaat NIET om de formule. Die zijn allemaal goed.
De macro zet na de invoer een formule in een cel. De formule geeft echter de foutmelding #naam?. Als ik nu dubbelklik op de cel om de verwijzingen te zien en dan op enter druk, geef de formule wel de juiste uitkomst. Aangezien je hiermee aantoont dat de formule wel werkt, waarom rekent hij het niet in eerste instantie uit?

Zie printscreen 1 t/m 3

Bekijk eens je formule en zoek daar dan de fout
Code:
=ALS(D5="kort haar";HORIZ.ZOEKEN(F5;Prijslijst!A2:A50;2);"")
Wat je ook kan doen dat is de formule opnemen via de recorder en deze dan implementerenin je macro , @ hoornvan met een validatie bereik ben je steeds zeker
 
Beste Wim,

Het bereik maakt in de macroformule in dit geval niets uit. Ik blijf de foutmelding krijgen. De naam die trucker heeft gegeven had ik over het hoofd gezien. Dit geeft voor mij wel de oplossing. Erg raar?
Anyway ik kan weer verder met het bouwen van de formule. Nogmaals bedankt voor jullie tijd en geduld.
 
bvierhout,

De naam die trucker heeft gegeven had ik over het hoofd gezien. Dit geeft voor mij wel de oplossing. Erg raar?
Volgens mij is dit ook een bereik.
 
Klopt, daarom snap ik ook niet waarom een gedefinieerd bereik het wel doet en hetzelfde bereik in een macro formule niet? Heb het nu al 4x nagekeken op tikfouten, maar kan geen verklaring vinden. Maar we kunnen weer verder. Heb een hoop geleerd.
 
Klopt, daarom snap ik ook niet waarom een gedefinieerd bereik het wel doet en hetzelfde bereik in een macro formule niet? Heb het nu al 4x nagekeken op tikfouten, maar kan geen verklaring vinden. Maar we kunnen weer verder. Heb een hoop geleerd.
een bereik zet je niet tussen leestekens zie jouw vb 'A2':'A10'
 
Klopt ook. De formule in de macro had ook geen leestekens. In excel werden deze er wel tussen gezet?

Ik heb aardig wat kennis over formules in excel, maar niet in VBA.

Moet wel zeggen dat ik al veel hulp heb gehad aan jullie forum. Echt super!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan