2016-05-27 9 views
1

Ich beabsichtige, einige Arbeit mehr oder weniger automatisch zu machen und dafür denke ich, Excel VBA zu verwenden. Grundsätzlich möchte ich eine separate Arbeitsmappe, um Daten aus verschiedenen Arbeitsmappen abrufen.Problem mit Vlookup von einer anderen Arbeitsmappe

Dafür habe ich versucht:

Dim openWb As Workbook 
Dim openWs As Worksheet 

Path = Dir("PathToFile\File.xlsx") 
filepath = "PathToFile" 

Set openWb = Workbooks.Open(filepath & Path) 
Set openWs = openWb.Sheets("Sheet1") 

currentwb.Sheets("Sheet2").Cells.(2, 20).Value = openWs.VLOOKUP("John",openWs.Range("A1:S30"), openWs.Match("Age", openWs.Range(A1:S1)) 

Was will ich erreichen ist im Grunde genommen einen Wert aus der Reihe zu holen entsprechend „John“ und die Spalte „Age“ entspricht. Ich verwende Match mit einem ziemlich großen Bereich (anstatt nur einer Spalte), um eine Situation zu vermeiden, in der jemand anders die Datei verändert, was zu Problemen führen könnte.

Das gibt mir Syntaxfehler in der Zeile:

Value = openWs.VLOOKUP("John",openWs.Range("A1:S30"), openWs.Match("Age", openWs.Range(A1:S1)) 

Ich gehe davon aus, dass es mit dem zu tun hat, wie ich „openWs“ und so im Inneren des vlookup Argument verwenden. Könnte jemand identifizieren, wo ich falsch gedacht habe?

Ich verwende Pfad und Dateipfad als Variablen, da das Programm später jeden Monat einen neuen Pfad und einen neuen Dateipfad hat, und dies ist der beste Weg, um das zu erreichen (im Grunde besteht der Pfad und Dateipfad aus Monatsnamen) und Jahresnamen, die ich auf Grund des heutigen Datums verhaue).

+0

Sie benötigen ein 'worksheetfunction' vor dem' vlookup' hinzufügen, aber ich schlage vor, einen Blick in "finden". – findwindow

Antwort

3

all „openWs“ Ersetzen vor Spiel und SVERWEIS mit „Anwendung“, so dass es lautet:

Value = Application.VLOOKUP("John",openWs.Range("A1:S30"), Application.Match("Age", openWs.Range("A1:S1"))) 
+0

Benutzer möglicherweise auch explizit das letzte Argument in der Funktion "Match" festlegen möchten. –

+0

Bitte prüfen Sie auf Tippfehler, da es scheinbar einen Compilerfehler in VBE gibt. – skkakkar

+1

@Devin Trowbridge Ob es sein kann ~ Match ("Alter", openWs.Range ("A1: S1"))) ~ ~ ~ ~ A1: S1 ~ um ~ ~ ~ ~ eingeschlossen werden – skkakkar

Verwandte Themen