HERBERS Excel-Forum - das Archiv

Thema: Fehler beim kompilieren Fehler: Ungültiger Bezeichner

Fehler beim kompilieren Fehler: Ungültiger Bezeichner
terrier2511
Hallo,

kann mir bitte jemand helfen, der von VBA etwas mehr versteht wie ich? Bin leider doch ein wenig überfordert :-(

Aus einer Arbeitsmappe heraus sollen zwei andere Arbeitsmappen geöffnet werden. Aus diesen anderen Arbeitsmappen sollen dann Daten übernommen werden.

Folgenden Code habe ich mal "zusammen gebastelt":



Sub Update()

Dim wb1 As Workbook
Dim wb2 As String, wb3 As String

'wb1 = die aktive Arbeitsmappe aus der die anderen Arbeitsmappen-Namen inkl. Pfad entnommen werden und in die Daten aus den anderen Arbeitsmappen übernommen werden sollen
Set wb1 = ActiveWorkbook
'Name und Pfad zur Quell-Liste 1 - Zellinhalt: D:\Dokumente\Quelliste_1.xlsx
wb2 = Range("B2").Value
'Name und Pfad zur Quell-Liste 2 - Zellinhalt: D:\Dokumente\Quelliste_2.xlsx
wb3 = Range("B3").Value

'**Ausschalten Fehlermeldung
Application.DisplayAlerts = False

'**öffnen Quell-Liste 1
Workbooks.Open wb2, ReadOnly:=True

'im wb1 in Zelle B1 steht das aktuelle Datum. In der Quell-Liste soll in Spalte A danach gesucht werden und dann für jede Zeile in wb1 der Eintrag aus der entaprechenden Spalte der Quell-Liste übernommen werden
wb1.Worksheets("Tabelle1").Range("B5").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb2.Worksheets("Tabelle1").Range("A2:I400"), 2)
wb1.Worksheets("Tabelle1").Range("B6").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb2.Worksheets("Tabelle1").Range("A2:I400"), 3)
wb1.Worksheets("Tabelle1").Range("B7").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb2.Worksheets("Tabelle1").Range("A2:I400"), 4)
wb1.Worksheets("Tabelle1").Range("B8").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb2.Worksheets("Tabelle1").Range("A2:I400"), 5)
wb1.Worksheets("Tabelle1").Range("B9").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb2.Worksheets("Tabelle1").Range("A2:I400"), 6)
wb1.Worksheets("Tabelle1").Range("B10").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb2.Worksheets("Tabelle1").Range("A2:I400"), 7)
wb1.Worksheets("Tabelle1").Range("B11").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb2.Worksheets("Tabelle1").Range("A2:I400"), 8)
wb1.Worksheets("Tabelle1").Range("B12").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb2.Worksheets("Tabelle1").Range("A2:I400"), 9)

'**Schließen Quell-Liste 1
Workbooks(wb2).Close

'**öffnen Quell-Liste 2
Workbooks.Open wb3, ReadOnly:=True

'im wb1 in Zelle B1 steht das aktuelle Datum. In der Quell-Liste soll in Spalte A danach gesucht werden und dann für jede Zeile in wb1 der Eintrag aus der entaprechenden Spalte der Quell-Liste übernommen werden
wb1.Worksheets("Tabelle1").Range("C5").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb3.Worksheets("Tabelle1").Range("A2:I400"), 2)
wb1.Worksheets("Tabelle1").Range("C6").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb3.Worksheets("Tabelle1").Range("A2:I400"), 3)
wb1.Worksheets("Tabelle1").Range("C7").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb3.Worksheets("Tabelle1").Range("A2:I400"), 4)
wb1.Worksheets("Tabelle1").Range("C8").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb3.Worksheets("Tabelle1").Range("A2:I400"), 5)
wb1.Worksheets("Tabelle1").Range("C9").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb3.Worksheets("Tabelle1").Range("A2:I400"), 6)
wb1.Worksheets("Tabelle1").Range("C10").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb3.Worksheets("Tabelle1").Range("A2:I400"), 7)
wb1.Worksheets("Tabelle1").Range("C11").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb3.Worksheets("Tabelle1").Range("A2:I400"), 8)
wb1.Worksheets("Tabelle1").Range("C12").Value = WorksheetFunction.VLookup(wb1.Worksheets("Tabelle1").Range("B1"), wb3.Worksheets("Tabelle1").Range("A2:I400"), 9)

'**Schließen Quell-Liste 2
Workbooks(wb3).Close


'**Fehlemeldungen wieder einschalten
Application.DisplayAlerts = True

End Sub



Irgendwie passt das mit meinen "Variablen" wb1, wb2 und wb3 nicht so ganz

Vielen Dank und viele Grüße
Harry
AW: Fehler beim kompilieren Fehler: Ungültiger Bezeichner
Oppawinni
Also ... ähm
Rhetorische Frage: Warum machst du
set wbk = ActiveWorkbook
weil wbk ein Objekt ist und man da nicht einfach sagen kann
wbk = ActiveWorkbook
Wenn du ein Objekt hast, dann kannst du Eigenschaften und Methoden durch diese Punkt-Verknüpfungen verwenden, also sowas
wbk.worksheets(1).range.....usw.
dann gehst du aber hin und sagst
wb2 = Range("B2").Value
wobei du wb2 klar als String deklariert hast und denkst du kannst den String dann wie ein Worksheetobjekt verwenden??? Bitte !?
Du brauchst ja aber auch bei Workbooks.Open den String, aber dann nenne die String-Variable bitte nicht wb2, sondern meinetwegen sWb2, oder sowas...
Du brauchst du aber trotzdem noch eine Variable wb2 as Workbook
Workbooks.open hat als Rückgabewert "Ein Workbook-Objekt, das die geöffnete Arbeitsmappe darstellt."
und wenn eine Funktion einen Rückgabewert liefern soll, so müssen die Funktionsparameter in Klammern stehen.....
set wb2 = Workbooks.open(....)
am Ende kannst du dann
wb2.close
schreiben.
Dahinter dann vielleicht noch
set wb2 = nothing

Das soll für's Erste mal genügen.
AW: Fehler beim kompilieren Fehler: Ungültiger Bezeichner
terrier2511
Hallo Oppawinni,

"Also ... ähm
Rhetorische Frage: Warum machst du
set wbk = ActiveWorkbook
weil wbk ein Objekt ist und man da nicht einfach sagen kann
wbk = ActiveWorkbook"

....
wobei du wb2 klar als String deklariert hast und denkst du kannst den String dann wie ein Worksheetobjekt verwenden??? Bitte !?


Gute Fragen ... bin leider nicht so fit in VBA. Habe letztlich auf diversen Seiten im Internet nach Codes gesucht die ansatzweise das tun was ich benötige. Dann versucht das entsprechend anzupassen. Tja und wenn man dann aber nicht alles zu 100% versteht, dann passiert genau so etwas. Der "Schuß" ging dann wohl am Ziel vorbei. Ein für einen Experten etwas "wirrer" Code. Sorry

Wenn ich Dich richtig verstehe ist es wichtig, dass ich das trenne. Workbook, Pfad und Workbook bzw Arbeitsblatt. Nur dann kann ich das auch an jeder Stelle entsprechend ansprechen. Werde mal Deinen Codevorschlag den Du noch geschrieben ausprobieren.

Vielen Dank schon mal

Viele Grüße
Harry


AW: Fehler beim kompilieren Fehler: Ungültiger Bezeichner
Onur
HIER

Workbooks(wb2).Close

und hier
Workbooks(wb3).Close

machst du es richtig.
Aber hier
Workbooks.Open wb3, ReadOnly:=True

und hier
Workbooks.Open wb2, ReadOnly:=True

NICHT.
Warum ???
AW: Fehler beim kompilieren Fehler: Ungültiger Bezeichner
terrier2511
Hallo Onur,

"HIER

Workbooks(wb2).Close

und hier
Workbooks(wb3).Close

machst du es richtig.
Aber hier
Workbooks.Open wb3, ReadOnly:=True

und hier
Workbooks.Open wb2, ReadOnly:=True

NICHT.
Warum ???"


Weil ich ein absoluter Amateur bin :-) Es kamen diverse Fehlermeldungen. Habe dann immer wieder andere Stellen im Internet gesucht um dort eine Hilfe zu finden. Ich fürchte, dass ich dann aber immer mehr am Code "kaputt" gemacht habe. Sie wie hier die Klammern. Irgendwie fand ich dort Codes wo die Variablen ohne Klammern angesprochen werden konnten. Stimmt aber, einmal mit und einmal ohne Klammern ist unlogisch :-)

=> also Klammer um wb2 wäre korrekt?

Vielen Dank und viele Grüße
Harry
AW: Fehler beim kompilieren Fehler: Ungültiger Bezeichner
Onur
Workbooks(wb3).Open , ReadOnly:=True



und hier

Workbooks(wb2).Open , ReadOnly:=True
AW: Fehler beim kompilieren Fehler: Ungültiger Bezeichner
Oppawinni
Ich kann das ja leider nicht testen, aber
das könnte etwa so funktionieren:
Sub Update()


Dim wb1 As Workbook, wb2 As Workbook
Dim wks1 As Worksheet, wks2 As Worksheet
Dim sWb2Path As String, sWb3Path As String
Dim i As Long

'wb1 = die aktive Arbeitsmappe aus der die anderen Arbeitsmappen-Namen inkl. Pfad entnommen werden und in die Daten aus den anderen Arbeitsmappen übernommen werden sollen
Set wb1 = ActiveWorkbook
Set wks1 = wb1.Worksheets("Tabelle1")
'Name und Pfad zur Quell-Liste 1 - Zellinhalt: D:\Dokumente\Quelliste_1.xlsx
sWb2Path = wks1.Range("B2").Value
'Name und Pfad zur Quell-Liste 2 - Zellinhalt: D:\Dokumente\Quelliste_2.xlsx
sWb3Path = wks1.Range("B3").Value

'**Ausschalten Fehlermeldung
Application.DisplayAlerts = False

'**öffnen Quell-Liste 1
Set wb2 = Workbooks.Open(sWb2Path, ReadOnly:=True)
Set wks2 = wb2.Worksheets("Tabelle1")
'im wb1 in Zelle B1 steht das aktuelle Datum. In der Quell-Liste soll in Spalte A danach gesucht werden und dann für jede Zeile in wb1 der Eintrag aus der entaprechenden Spalte der Quell-Liste übernommen werden
For i = 2 To 9
wks1.Cells(i + 3, "B").Value = WorksheetFunction.VLookup(wks1.Range("B1"), wks2.Range("A2:I400"), i)
Next
wb2.Close

'**öffnen Quell-Liste 2
Set wb2 = Workbooks.Open(sWb3Path, ReadOnly:=True)
Set wks2 = wb2.Worksheets("Tabelle1")
'im wb1 in Zelle B1 steht das aktuelle Datum. In der Quell-Liste soll in Spalte A danach gesucht werden und dann für jede Zeile in wb1 der Eintrag aus der entaprechenden Spalte der Quell-Liste übernommen werden
For i = 2 To 9
wks1.Cells(i + 3, "C").Value = WorksheetFunction.VLookup(wks1.Range("B1"), wks2.Range("A2:I400"), i)
Next
wb2.Close

'**Fehlemeldungen wieder einschalten
Application.DisplayAlerts = True

End Sub
AW: Fehler beim kompilieren Fehler: Ungültiger Bezeichner
terrier2511
Hallo Oppawinni

vielen Dank für den Code.

Läuft wunderbar so weit.

Tausend Dank!

Viele Grüße
Harry