vba excel SVERWEIS: lookup-Wert in array gespeichert, lookup-Tabelle in excel, die Ausgabe Wert zu array
Bin ich mit dem SVERWEIS zum Auffüllen der ein array in vba.
Array (InfArray) ist ein ~100-Zeile 3-Spalte-array. Die erste Spalte des Arrays ist bereits gefüllt mit integer-Werten. Diese integer-Werte entsprechen einem Namen. In einem meiner excel-Blatt habe ich eine Tabelle, die hat jeder integer-id aufgeführt, mit den entsprechenden Namen. So will ich mit der SVERWEIS-Funktion prüfen Sie die id integer, und füllen Sie die zweite Spalte des Arrays mit den tatsächlichen Namen.
Hier ist der code-Anweisung habe ich zum zuweisen der zweiten Spalte (original schlechter code):
For y = 1 To UBound(InfArray,1)
Set InfArray(y,2) = Application.WorksheetFunction.VLookup(InfArray(y,1), NameSheet.Range("B2:C244"), 2, False).Value
Next y
Es ist mir eine Objekt-variable oder With-Blockvariable nicht festgelegt Fehler.
Wenn ich den cursor über den code text nach der Ausführung sehe ich, dass die
NameSheet.Range("B2:C244")
ist, wo die Objekt-variable oder with-Blockvariable nicht festgelegt Fehler liegt. Das ist wirklich verwirrend. Ich habe eine
Debug.Print NameSheet.Name
In den code vor dem Fehler und es wird mir der richtige name des excel-Blatt in Frage. Also den code muss man im richtigen Arbeitsblatt, aber irgendwie ist es nicht immer die Auswahl...?
Ich bin verloren, bitte helfen Sie
EDIT: Der Fehler war ein Tippfehler im code
NameSheet.Range("B2:C244")
hätte
NamesSheet.Range("B2:C244")
Beachten Sie das " s " am Ende von Namen
Funktioniert das nun mit den änderungen vorgeschlagen
Arbeiten code-Zeile:
For y = 1 To UBound(InfArray,1)
InfArray(y,2) = Application.WorksheetFunction.VLookup(InfArray(y,1), NamesSheet.Range("B2:C244"), 2, False)
Next y
Entschuldigung für die stoopid Fehler.
Danke für Sie Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Loszuwerden, die Set-Anweisung. Es sollte nur verwendet werden, mit Objekt-Variablen.
Aber auch...
Piercing die Grenze zwischen VBA und Excel 100-mal in einer Schleife ist nicht ein effizientes design. Es wäre viel besser, schnapp dir deine Tabelle einmal, legen Sie Sie in ein VBA-array, und dann drehen Sie einfach durch diese zusätzliche array zu finden, die lookup-Werte.
Entfernen Sie die
.Value
von der Die Funktion SVERWEIS. Die Bereich.Value-Eigenschaft ist nicht Teil der SVERWEIS.Habe ich auch reduziert, nach unten zu
Application.VLookup
das ist alles, was notwendig ist.Set
der Rückgabewert von SVERWEIS, nur weisen Sie mit dem =.