Andere Excel Instanz ansprechen
Schritt-für-Schritt-Anleitung
Um eine neue Excel Instanz zu erstellen und damit zu arbeiten, kannst du den folgenden VBA-Code verwenden. Dieser wird im Workbook_Open()
-Ereignis eingesetzt:
Private Sub Workbook_Deactivate()
Application.ScreenUpdating = False
Dim n As String
If Workbooks.Count > 1 Then
Application.EnableEvents = False
With ActiveWorkbook
n = .FullName
.Close savechanges:=False
End With
Application.EnableEvents = True
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
On Error Resume Next
If Dir(n) <> "" Then
xlApp.Workbooks.Open Filename:=n
If Err.Number > 0 Then
xlApp.Quit
Else
xlApp.Application.Visible = True
End If
Else
xlApp.Workbooks.Add
xlApp.Application.Visible = True
End If
Set xlApp = Nothing
End If
Workbooks("XMAIL_V4.xlsm").Activate
Application.Visible = False
End Sub
Mit diesem Code wird eine zweite Excel Instanz geöffnet, wenn du das aktuelle Workbook schließt. Um auf ein Arbeitsblatt in dieser Instanz zuzugreifen, kannst du eine öffentliche Objektvariable verwenden:
Option Explicit
Public xlApp As Object
Sub test2()
xlApp.Workbooks("Test.xlsm").Sheets("Hagen").Select
End Sub
Häufige Fehler und Lösungen
Ein häufiger Fehler, den viele Benutzer machen, ist das Vergessen, die Variable xlApp
als öffentlich zu deklarieren oder sie in dem Deactivate-Event erneut zu setzen. Achte darauf, dass du diese Zeilen nicht mehr in der Deactivate-Prozedur hast:
Dim xlApp As Object
Set xlApp = Nothing
Wenn du eine Fehlermeldung erhältst, dass die Objektvariable oder With-BV nicht festgelegt ist, könnte das darauf hindeuten, dass die Instanz nicht korrekt initialisiert wurde. Stelle sicher, dass xlApp
richtig gesetzt ist.
Alternative Methoden
Eine alternative Methode zur Ansteuerung einer Excel Instanz ist die Verwendung von GetObject
. Hier ein Beispiel, wie du dies umsetzen kannst:
Sub Test3()
Dim objWorkbook As Workbook
Set objWorkbook = GetObject("\\vwserver\users\Test.xlsm")
objWorkbook.Sheets("Hagen").Select
End Sub
Diese Methode ermöglicht es dir, auf eine bereits geöffnete Instanz zuzugreifen, ohne eine neue zu erstellen.
Praktische Beispiele
Hier sind einige praktische Beispiele, wie du mit der neuen Excel Instanz arbeiten kannst:
-
Ein Arbeitsblatt auswählen:
xlApp.Workbooks("Test.xlsm").Sheets(1).Select
-
Überprüfen, ob ein Arbeitsblatt existiert:
Dim sheetName As String
sheetName = "Hagen"
If Not IsError(Application.Match(sheetName, xlApp.Worksheets, 0)) Then
xlApp.Workbooks("Test.xlsm").Sheets(sheetName).Select
Else
MsgBox "Das Blatt existiert nicht."
End If
Tipps für Profis
- Verwende
Public xlApp As Excel.Application
anstelle von Public xlApp As Object
, um die Vorteile der IntelliSense in VBA zu nutzen.
- Achte darauf, dass du die Instanz nach der Benutzung korrekt schließt, um Ressourcen freizugeben.
- Teste deine Skripte in einer kontrollierten Umgebung, bevor du sie in Produktionsdateien anwendest.
FAQ: Häufige Fragen
1. Wie öffne ich eine neue Excel Instanz?
Du kannst eine neue Excel Instanz öffnen, indem du den VBA-Befehl CreateObject("Excel.Application")
verwendest.
2. Was mache ich, wenn ich auf ein Arbeitsblatt in einer anderen Instanz zugreifen möchte?
Stelle sicher, dass du die öffentliche Objektvariable xlApp
korrekt deklariert und initialisiert hast, um auf die Arbeitsblätter in der anderen Instanz zuzugreifen.
3. Warum funktioniert mein Code nicht, wenn ich eine VBS-Datei verwende?
Überprüfe, ob du die Excel-Anwendung richtig instanziiert hast und dass du die Datei ordnungsgemäß öffnest. Achte auch darauf, dass keine Syntaxfehler in deinem VBS-Code vorhanden sind.