Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Andere Excel Instanz ansprechen

Forumthread: Andere Excel Instanz ansprechen

Andere Excel Instanz ansprechen
10.02.2021 15:09:20
M.A.
Hallo zusammen,
mit einer Kombination aus einer VBS Datei und folgendem Code bei Workbook_Open(), erstelle ich eine komplett neue Excel Instanz (Applikation) bei vorherigen und anschließendem Öffnen anderer Excel Dateien.
  • 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 'MsgBox "open" 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

  • Im Taskmanager sind es 2 separate Zeilen.
    In Datei 1 wird per Combobox ein Standort ausgewählt.
    Ich möchte nun, dass bei Auswahl eines Standortes per Dropdown in Datei 1, bei Datei 2 das
    entsprechende Sheet mit dem (identischen) Standortnamen XY angewählt wird.
    In der selben Instanz kein Problem.
  • If CB_Test.Value = "Hagen" Then Workbooks("Test.xlsm").Sheets("Hagen").Select End If
  • Für eine andere Instanz habe ich bisher nur
  • Set xlApp = GetObject("ExampleBook.xlsx").Application

  • gefunden, was nicht funktionierte.
    Vermutlich ist die Lösung wieder einfacher als gedacht :)
    Lieben Dank vorab.
    Anzeige

    7
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Andere Excel Instanz ansprechen
    10.02.2021 15:37:00
    Nepumuk
    Hallo,
    du hast doch die andere Instanz schon in der Variablen xlApp. Deklariere diese in einem Standardmodul als öffentliche Objektvariable dann kannst du in jeder Prozedur darauf zugreifen.
    Gruß
    Nepumuk
    AW: Andere Excel Instanz ansprechen
    11.02.2021 15:26:05
    M.A.
    Hallo Nepumuk,
    danke für die schnelle Antwort.
    Bekomme ich irgendwie nicht hin. Bin aber auch blutiger Anfänger.
    Option Explicit
    Public xlApp As Object
    Sub test2()
    xlApp.Workbooks("Test.xlsm").Sheets("Hagen").Select
    End Sub
    
    Beim Starten von Test2() erscheint die Fehlermeldung Objektvariable oder With-BV nicht festgelegt.
    Habe auch andere Variationen probiert.
    Anzeige
    AW: Andere Excel Instanz ansprechen
    11.02.2021 15:38:08
    Nepumuk
    Hallo,
    hast du im Deactivate-Event die Deklaration Dim xlApp As Object in der Prozedur gelöscht und auch die Zeile Set xlApp = Nothing?
    Zudem Würde ich es so deklarieren:
    Public xlApp As Excel.Application
    
    Gruß
    Nepumuk
    AW: Andere Excel Instanz ansprechen
    11.02.2021 16:07:44
    M.A.
    Deklarationen habe ich nun wie beschrieben gelöscht im Deactivate-Event. Puplic Deklaration wie von dir beschrieben angepasst. Das Workbook in der 2. Application lässt sich weiterhin nicht ansprechen. Identischer Fehler.
    With xlApp
    Workbooks("Test.xlsm").Sheets("Hagen").Select
    End With
    End Sub
    

    Sub Test3()
    xlApp.Workbooks("Test.xlsm").Sheets("Hagen").Select
    End Sub
    
    etc.
    Anzeige
    AW: Andere Excel Instanz ansprechen
    11.02.2021 16:19:01
    Nepumuk
    Hallo,
    ich habe es jetzt selbst getestet, funktioniert einwandfrei. Versuch es mal damit:
    Sub Test3()
    xlApp.Workbooks("Test.xlsm").Sheets(1).Select
    End Sub
    

    Wenn das klappt, dann gibt es entweder keine Tabelle mit dem Namen "Hagen" oder es hat sich im Namen versehentlich ein Leerzeichen vorne oder hinten eingeschlichen.
    Gruß
    Nepumuk
    Anzeige
    AW: Andere Excel Instanz ansprechen
    11.02.2021 16:38:33
    M.A.
    Danke fürs Testen Nepumuk,
    Funktioniert. Allerdings nur, wenn ich es nicht zusätzlich über die .vbs öffne.
    vbs Code:
    Option Explicit
    Dim Excel
    Set Excel = WScript.CreateObject("Excel.Application")
    Excel.Visible = True
    Excel.Workbooks.Open  "\\vwserver\users\Test.xlsm", , , , "Passwort123"
    Set Excel = Nothing
    WScript.Quit
    
    Meine "Datei" soll und wird jedoch vorher damit gestartet.
    Fällt dir da zufällig auch etwas ein? ^^
    Anzeige
    AW: Andere Excel Instanz ansprechen
    11.02.2021 18:08:22
    Nepumuk
    Hallo,
    hast du es damit getestet:
    Public Sub Test()
        Dim objWorkbook As Workbook
        Set objWorkbook = GetObject("\\vwserver\users\Test.xlsm")
        MsgBox objWorkbook.Name
    End Sub

    Gruß
    Nepumuk
    Anzeige
    ;
    Anzeige
    Anzeige

    Infobox / Tutorial

    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:

    1. Ein Arbeitsblatt auswählen:

      xlApp.Workbooks("Test.xlsm").Sheets(1).Select
    2. Ü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.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige