In diesem Tutorial wird der Unterschied zwischen VBA ActiveWorkbook und ThisWorkbook erläutert.
ActiveWorkbook vs. ThisWorkbook
Es ist wichtig, den Unterschied zwischen ActiveWorkbook und ThisWorkbook in VBA zu kennen:
Die ActiveWorkbook ist die Arbeitsmappe, die derzeit aktiv ist (ähnlich wie ActiveSheet das derzeit aktive Blatt ist). ThisWorkbook ist die Arbeitsmappe, in der der VBA-Code gespeichert ist. Diese Arbeitsmappe wird sich nie ändern.
DiesesArbeitsbuch
Stellen Sie sich ThisWorkbook als eine Objektvariable vor, mit der Sie auf die Arbeitsmappe verweisen können, die den aktuell ausgeführten Code enthält.
Dieser Code zeigt eine MessageBox mit dem Namen ThisWorkbook an:
123 | Unter Show_ThisWorkbook()MsgBox ThisWorkbook.NameEnd Sub |
AktivArbeitsmappe
Die ActiveWorkbook ist eine Objektvariable, mit der Sie auf die derzeit aktive Arbeitsmappe verweisen können.
Dieser Code zeigt eine MessageBox mit dem ActiveWorkbook-Namen an:
123 | Unter Show_ActiveWorkbook()MsgBox ActiveWorkbook.NameEnd Sub |
VBA nimmt ActiveWorkbook an
Wenn Sie versuchen, mit Objekten (z. B. Sheets) innerhalb der ActiveWorkbook zu arbeiten, müssen Sie das ActiveWorkbook-Objekt nicht explizit angeben. VBA geht davon aus, dass Sie sich auf das ActiveWorkbook beziehen.
Also das:
1 | ActiveWorkbook.Sheets("Sheet1").Range("$A$5").Value = 1 |
Ist das gleiche:
1 | Sheets("Sheet1").Range("$A$5").Value = 1 |
Neue oder geöffnete Arbeitsmappen sind aktiv
Immer wenn Sie eine neue Arbeitsmappe erstellen oder eine Arbeitsmappe öffnen, wird die Arbeitsmappe „Aktiv“. Mit diesem Code können Sie sich selbst davon überzeugen, dass eine Arbeitsmappe hinzugefügt und der Name der neuen Arbeitsmappe abgerufen wird:
1234 | Unter Show_ActiveWorkbook_Add()Arbeitsmappen.HinzufügenMsgBox ActiveWorkbook.NameEnd Sub |
Nachdem Sie eine Arbeitsmappe hinzugefügt oder geöffnet haben, können Sie sie mithilfe des ActiveWorkbook-Objekts einer Variablen zuweisen. Wie das geht, zeigen wir Ihnen in den folgenden Beispielen:
Beispiele für diese Arbeitsmappe und ActiveWorkbook
Aktive Arbeitsmappe wechseln
Wechseln Sie die aktive Arbeitsmappe mit dem Arbeitsmappennamen:
1 | Arbeitsmappen("Buch1").Aktivieren |
Wechseln Sie die aktive Arbeitsmappe mit der Arbeitsblatt-Reihenfolgenummer (1 ist das erste Arbeitsblatt in einer Arbeitsmappe)
1 | Arbeitsmappen(1).Aktivieren |
Diese Arbeitsmappe aktivieren
Machen Sie ThisWorkbook (wo der aktuell ausgeführte Code gespeichert ist) zum ActiveWorkbook:
1 | DieseArbeitsmappe.Aktivieren |
Setzen Sie ActiveWorkbook auf eine Variable
Weisen Sie die ActiveWorkbook einer Arbeitsmappenobjektvariablen zu:
12 | Dim wb als ArbeitsmappeSet wb = ActiveWorkbook |
Schließen und speichern Sie die aktive Arbeitsmappe
Schließt und speichert die ActiveWorkbook:
1 | ActiveWorkbook.Close SaveChanges:=True |
Schließen Sie die aktive Arbeitsmappe ohne zu speichern
Schließt die ActiveWorkbook ohne zu speichern:
1 | ActiveWorkbook.Close SaveChanges:=False |
ActiveWorkbook - Speichern unter
Führt ein Speichern unter der aktiven Arbeitsmappe durch.
123456789 | Unter SaveAsActiveWorkbook()Dimmergebnis Als Varianteresult = Application.GetSaveAsFilename(InitialFileName:="", _FileFilter:="Excel-Makro-aktivierte Arbeitsmappe (*.xlsm), *.xlsm,Excel-Arbeitsmappe (*.xlsx), *.xlsx")Wenn Ergebnis = Falsch, dann RückgabeActiveWorkbook.SaveAs resultEnd Sub |