2016-10-18 2 views
0

Ich habe versucht, das Ergebnis eines vlookup einer Variablen zuzuweisen, aber der vlookup-Wert ist eigentlich eine Benutzereingabe, funktioniert aber nicht.InputData1-Variable nimmt nicht die Vlookup-Funktion

Ich weiß nicht, was sonst kann ich auf meinem VBA-Code ändern :(

Es zeigt mir eine Debug-Fehler auf der vlookup Formel

 Sub Info() 

Dim the_sheet As Worksheet 
Dim table_list_object As ListObject 
Dim table_object_row As ListRow 
Dim inputData, inputData1 As String 
Dim wsFunc As WorksheetFunction: Set wsFunc = Application.WorksheetFunction 
Dim rngLook As Range 

Set rngLook = Sheets("AutoZeroDatabase").Range("H1:I12") 

Set the_sheet = Sheets("Info") 
Set table_list_object = the_sheet.ListObjects("Table1") 
Set table_object_row = table_list_object.ListRows.Add 

inputData = InputBox("Enter a number from 1 to 12 to select a month i.e. 1 for January", "Input Box Text") 

inputData1 = wsFunc.VLookup(CInt(inputData), rngLook, 2, False) 

table_object_row.Range(1, 1).Value = inputData1 

MsgBox ("Thank you for taking the time to update me :)") 

End Sub 
+1

Angenommen, Sie haben Zahlen in den Zellen H1: H12, stellen Sie sicher, dass Sie 'inputData' von einer' Variant' in eine Integer konvertieren, indem Sie 'wsFunc.VLookup (CInt (inputData), rngLook, 2, False)' verwenden. – YowE3K

+1

Oder verwenden Sie eine Application.InputBox anstelle von nur einer InputBox und verwenden Sie den 'Type' Parameter mit einem Wert von 1. – YowE3K

+0

Sie sind der Mann :). Ja, die Informationen zu diesem Bereich enthalten Nummern in der ersten Spalte und Text in der zweiten Spalte. Ich glaube, das kann behoben werden, wenn ich die Variable in ganzzahlig richtig ändere? – Sam

Antwort

2

Ihr Problem, weil Sie zu entstehen scheint sind zu erhalten ein String-Wert aus dem InputBox, vergleicht aber dann, dass numerische Werte in Zellen H1: H12

ich die folgende Änderung an Ihrem Code empfehlen.

Sub Info() 

    Dim the_sheet As Worksheet 
    Dim table_list_object As ListObject 
    Dim table_object_row As ListRow 
    Dim inputData 
    Dim inputData1 
    Dim rngLook As Range 

    Set rngLook = Sheets("AutoZeroDatabase").Range("H1:I12") 

    Set the_sheet = Sheets("Info") 
    Set table_list_object = the_sheet.ListObjects("Table1") 
    Set table_object_row = table_list_object.ListRows.Add 

    Do 
     inputData = Application.InputBox(Prompt:="Enter a number from 1 to 12 to select a month i.e. 1 for January", _ 
             Title:="Input Box Text", _ 
             Type:=1 + 4) 'Type 1 is number, 4 is boolean 
     If TypeName(inputData) = "Boolean" Then 
      If Not inputData Then 
       inputData1 = "User refused to supply the month!!" 
       Exit Do 
      End If 
     ElseIf inputData <> Int(inputData) Then 
      MsgBox "Fractions of a month are not allowed!" 
     ElseIf inputData < 1 Or inputData > 12 Then 
      MsgBox "Months are numbered 1 to 12 - what am I meant to do with " & inputData & "?!?!?" 
     Else 
      inputData1 = Application.VLookup(inputData, rngLook, 2, False) 
      If IsError(inputData1) Then 
       MsgBox "Something went very, very wrong - I couldn't find that value in the set of valid months!" 
      End If 
      Exit Do 
     End If 
    Loop 

    table_object_row.Range(1, 1).Value = inputData1 

    MsgBox ("Thank you for taking the time to update me :)") 

End Sub 
+1

Do 'Application.Vlookup' statt' WorksheetFunction.Vlookup'. Letzteres lässt nicht zu, dass ein Fehlerwert zurückgegeben wird, und Sie müssen möglicherweise * nach einem Fehlerwert suchen, wenn der Wert "inputData" nicht in "rngLook" gefunden wird. Ihre Validierung kontrolliert die Benutzereingabeseite der Dinge ausreichend, aber es besteht immer noch die Möglichkeit, dass das Arbeitsblatt selbst beschädigt oder manipuliert wird, was zu einem Fehler bei der Zuweisung zu "inputData1" führen würde. –

+0

Dank an alle, ich auch herausfinden, dass ich einen Fehler bekam, weil der Bereich geändert wurde, als 1 Benutzer eine Spalte hinzugefügt, aber weiß, ich habe es :) – Sam

+1

Ich habe die Antwort basierend auf @ DavidZemens Vorschläge aktualisiert. (Ich wünschte, dass MSDN VLookup als eine der Methoden des Anwendungsobjekts auflistete !!) – YowE3K

Verwandte Themen