Verwendung von GetObject in Excel VBA
Schritt-für-Schritt-Anleitung
-
Öffnen der Excel-Anwendung: Nutze GetObject, um eine bestehende Arbeitsmappe zu öffnen. Zum Beispiel:
Dim wbMappe As Excel.Workbook
Set wbMappe = GetObject("E:\WP\aus1.xls")
-
Kopieren des Blattes: Wähle das Blatt aus, das du kopieren möchtest, und führe den Kopiervorgang durch. Das könnte folgendermaßen aussehen:
ThisWorkbook.Worksheets("D12").Copy wbMappe.Worksheets("ZielTabelle")
-
Schließen der Arbeitsmappe: Vergiss nicht, die geöffnete Arbeitsmappe zu schließen und die Objektvariablen zu setzen:
wbMappe.Close
Set wbMappe = Nothing
-
Ausführen des Makros: Führe das Makro aus, um die Änderungen anzuwenden.
Häufige Fehler und Lösungen
-
Fehler: Arbeitsmappe ist unsichtbar: Wenn du die Arbeitsmappe mit GetObject öffnest, bleibt sie unsichtbar. Um dies zu umgehen, kannst du die Bildschirmaktualisierung während des Kopiervorgangs deaktivieren:
Application.ScreenUpdating = False
' Dein Kopiercode hier
Application.ScreenUpdating = True
-
Fehler: Ungültiger Arbeitsblattname: Achte darauf, dass der Arbeitsblattname korrekt ist. Wenn das Blatt "D12" nicht existiert, wird ein Fehler ausgegeben.
Alternative Methoden
Eine alternative Methode, um eine Arbeitsmappe im Hintergrund zu bearbeiten, ist die Verwendung von Workbooks.Open anstelle von GetObject. Dies öffnet die Arbeitsmappe sichtbar, jedoch kannst du sie sofort minimieren:
Dim wbMappe As Workbook
Set wbMappe = Workbooks.Open("E:\WP\aus1.xls")
wbMappe.Windows(1).WindowState = xlMinimized
Dies ermöglicht es dir, die Arbeitsmappe zu bearbeiten, während sie minimiert bleibt.
Praktische Beispiele
Hier ist ein vollständiges Beispiel für ein Makro, das ein Blatt im Hintergrund kopiert:
Sub KopiereBlattImHintergrund()
Dim wbMappe As Excel.Workbook
Application.ScreenUpdating = False
Set wbMappe = GetObject("E:\WP\aus1.xls")
ThisWorkbook.Worksheets("D12").Copy wbMappe.Worksheets("ZielTabelle")
wbMappe.Close SaveChanges:=True
Set wbMappe = Nothing
Application.ScreenUpdating = True
End Sub
Tipps für Profis
-
Vermeide Select und Activate: Diese Methoden sind ineffizient und können zu unerwarteten Ergebnissen führen. Arbeite direkt mit den Objekten.
-
Nutzung von IsAddin: Du kannst die Eigenschaft IsAddin nutzen, um Arbeitsmappen zu verstecken und bei Bedarf wieder sichtbar zu machen. Dies kann sehr hilfreich sein, wenn du mit Add-Ins arbeitest.
-
Fehlerbehandlung einbauen: Füge Fehlerbehandlungsroutinen hinzu, um deine Makros robuster zu machen:
On Error Resume Next
' Dein Code hier
If Err.Number <> 0 Then
MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
End If
FAQ: Häufige Fragen
1. Was ist der Unterschied zwischen GetObject und Workbooks.Open?
GetObject öffnet eine bestehende Datei und kann sie im Hintergrund ausführen, während Workbooks.Open eine Datei sichtbar öffnet.
2. Kann ich eine Arbeitsmappe mit GetObject auch speichern?
Ja, du kannst die Arbeitsmappe speichern, bevor du sie schließt, indem du wbMappe.Save oder wbMappe.Close SaveChanges:=True verwendest.
3. Wie kann ich die Sichtbarkeit einer Arbeitsmappe ändern?
Du kannst die Sichtbarkeit einer Arbeitsmappe steuern, indem du die WindowState-Eigenschaft auf xlMinimized oder xlNormal setzt.