Wie weise ich mittels VBA einer Variablen ein Workbook zu?
Hallo, ich habe ein kleines Programm in VBA. Ich hänge gerade an folgender Stelle: Es sind 2 Excel-Dateien geöffnet (Datei-A und Datei-B). Das aktive Workbook ist Datei-A. Jetzt möchte ich aus Datei-B eine Zelle auslesen und diese einer Variablen als Wert zuweisen. Wie mache ich das? Datei-B ist ja weder das ActiveWorkbook, noch muss ich es erst noch öffnen, um es zum ActiveWorkbook zu machen. Ich möchte kurz gesagt zwei Variablen: Variable A ist Datei-A und Variable B ist Datei-B und möchte so immer zwischen diesen beiden unterscheiden. Ich möchte gerne ohne "ActiveWorkbook" arbeiten. Ich hoffe man versteht mein Problem und ihr könnt mir helfen.
3 Antworten
Verstehe ich dich falsch, oder redest du davon:
Workbooks("GeöffneteDatei").Worksheets("Tabelle1").Range("A1")
Beide Dateien sind doch schon geöffnet, oder?
Soweit ich weiß gibt es einen Befehl Workbooks.Open und Workbooks.Add. Zurückgeliefert wird ein Workbook-Objekt. Dieses kannst du mit Set einer Variablen zuweisen.
Dim wb as Workbook
Set wb = Workbooks.Open(...
Ist das Workbook offen, bekommst du so Zugriff:
Set wb = Excel.Workbooks(1) Set wb = Excel.Workbooks("wb.xlsm") wb.Worksheets(1).Range("A1").Value = "Suboptimierer"
(ungetestet)
Ja, richtig. Ich bin nur davon ausgegangen, dass der Fragesteller explizit die Variante mit Variablenzuweisung genannt bekommen haben mochte.
Ich möchte kurz gesagt zwei Variablen: Variable A ist Datei-A und Variable B ist Datei-B
Dim DateiA As Workbook
Dim DateiB As Workbook
Set DateiA = ActiveWorkbook ' Oder halt so, wie bei DateiB
Set DateiB = Workbooks.Open("C:\blub\MeineDatei.xls")
Ich denke, Du hast das hier überlesen:
Jetzt möchte ich aus Datei-B eine Zelle auslesen und diese einer Variablen als Wert zuweisen
ShitzOvran hat DAS beantwortet.
Ja, ich denke mal, das Hauptproblem war, wie man in einer Funktion auf zwei verschiedene Workbooks zugreifen kann. Wenn da noch Fragen bestanden hätten, hätte Herzbube27 bestimmt nochmal nachgefragt. Die Variante von ShitzOvran ist bei einer bereits geöffneten Excel natürlich auch möglich. Wie immer gibt es viele Wege zum Ziel.
Nur der Vollständigkeit halber: Wenn man eine Workbook-Variable hat und von dort den Wert einer Zelle in einer Variable speichern möchte, dann z.B. so:
Dim einWert As Variant einWert = DateiB.Sheets(1).Range("A1").Value
Alternativ könnte man natürlich auch Variablen für die Sheets erstellen, z.B. so:
Dim DateiA As Workbook
Dim DateiB As Workbook
Dim BlattA As Worksheet
Dim BlattB As Worksheet
Dim eineVariable As Variant
Set DateiA = ActiveWorkbook ' Oder halt so, wie bei DateiB
Set DateiB = Workbooks.Open("C:\blub\MeineDatei.xls")
Set BlattA = DateiA.Sheets(1)
Set BlattB = DateiB.Sheets(1)
eineVariable = BlattA.Range("A1").Value
BlattB.Range("B2").Value = eineVariable
...wobei man das Workbook in der Zuweisung auch direkt ansprechen kann, sieh ShitzOvran