2017-08-12 1 views
1

Ich habe einige Daten in einem Bereich in Zellen A2: B11. Was ich versuche, ist ein vlookup, um einen Wert basierend auf einer Eingabe zurückzugeben, durch die Eingabebox. Allerdings mag der Excel-VBA-Editor die Zeile meines Codes mit der eigentlichen SVERWEIS-Funktion nicht, aber für mich ist nichts falsch daran. Bitte kann mir jemand helfen und mir sagen, wo ich falsch liege. Hier ist der Code .....vlookup funktioniert nicht in VBA, funktioniert aber in Excel

Sub getprice() 

Dim PartNum As Variant 
Dim Price As Double 

Sheets("Sheet1").Activate 
Set pricelist = Sheets("Sheet1").Range("A2:B11") 
PartNum= InputBox("provide the part number") 

Price = WorksheetFunction.VLookup(partnum, pricelist, 2, false) 
MsgBox partnum & "costs" & price 

End Sub 
+0

Ihr Code funktioniert für mich. Ich vermute, dass das Problem in den spezifischen Daten liegt, die Sie verwenden - wie würde ein Beispiel "PartNum" aussehen? (ZB ist es etwas wie 'ABC-123-AS' oder ist es nur' 1234'?) – YowE3K

+2

InputBox wird eine Zeichenkette zurückgeben und wenn partNum eine Zahl in der Preisliste ist, findet es keine Übereinstimmung. Sie müssen es in Zahlen ändern. –

+0

Was macht _VBA Editor nicht die Linie_ bedeutet? – jsotola

Antwort

0

Ich habe ersetzt Ihre InputBox mit Application.InputBox, die wir an, Sie steuern, welche Arten von Daten der Benutzer eingeben kann, um mehr darüber zu lesen, gehen Sie zu MSDN.

Außerdem habe ich ein Fehler-Traping-Kriterium hinzugefügt, falls Vlookup nicht für PartNum in PriceList Bereich finden.

Andere Erklärung innerhalb des Codes unten als Kommentare.

-Code

Sub getprice() 

Dim PartNum As Long 
Dim Price As Double 
Dim PriceList As Range 

' set the Range object directly, there's no need to select the worksheet first 
Set PriceList = Sheets("Sheet1").Range("A2:B11") 

' use Application.InputBox with Type 1, ensures only numeric values are entered 
PartNum = Application.InputBox(Prompt:="provide the part number", Type:=1) 
' if the user pressed Cancel 
If Len(PartNum) = 0 Then 
    MsgBox "No Part Number entere", vbCritical 
    Exit Sub 
End If 

' you need to trap a possible error in case Vlookup is unable to find a match in PriceList Range 
If Not IsError(Application.VLookup(PartNum, PriceList, 2, False)) Then 
    PartNum = Application.VLookup(PartNum, PriceList, 2, False) 
    MsgBox PartNum & " costs " & Price 
Else 
    MsgBox PartNum & " not found in Range " & PriceList.Address 
End If 

End Sub 
Verwandte Themen