Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: GetObject (Mappe im Hintergrund öffnen)

GetObject (Mappe im Hintergrund öffnen)
20.08.2019 08:22:13
Chriss
Hallo Forum,
ich habe vor Zeiten eine relativ aufwendige Userform-Struktur basierend auf "GetObject" aufgebaut, muss nach einiger Zeit der Untätigkeit aber feststellen, dass der "GetObject" Befehl nicht mehr entsprechend ausgeführt wird.
Ich verwende kurz gesagt den nachfolgenden Code, um die gewünschte Datei im Hintergrund zu öffnen und diese dann letztlich auf verschiedenste Art auslesen zu können.

Dim GetObjectWB As Workbook
Set GetObjectWB = GetObject("M:\...\...\...\LS " & Worksheets("Tabelle1").Range("A1").Value & ".xlsx")
Früher hat es die Datei entsprechend geöffnet, das habe ich daran gesehen, dass meine INDIREKT-Bezüge "angesprungen sind" - nun passiert dies nicht mehr.
Wenn ich die Datei manuell öffne - nicht im Hintergrund - funktioniert alles wunderbar.
Daher sehe ich das Problem in dem "GetObject" Befehl.
Muss ich zusätzlich etwas einbauen?
Könnte eine neue Office Version irgendwas dahingehend blockieren, was ich seperat aktivieren muss?
Kann ich die Fehlerquelle genauer bestimmen?
Gibt es Alternativen?
Was VBA angeht bin ich recht unbeholfen, würde mich daher über Hilfe freuen.
Vielen Dank im Voraus!
VG,
Chriss
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: GetObject (Mappe im Hintergrund öffnen)
20.08.2019 08:39:32
Torsten
Hallo Chriss,
was willst du denn anstellen mit der im Hintergrund geoeffneten Datei? Daten von dort kopieren?
Ich haette eine Alternative fuer dich. Mit dieser wird die Datei in einer separaten Excel Instanz geoeffnet, aber nicht sichtbar. In meinem Beispiel werden Daten aus der Datei in die aktive Datei kopiert. Hier die benutzte Range aus dem ersten Tabellenblatt in das aktive Tabellenblatt meiner Makro Datei.

Sub ZugriffAufGeschlosseneSeite()
Dim rng As Range
With CreateObject("Excel.Application")
'Hier Datei und Blattnamen anpassen
With .Workbooks.Open("C:\Users\torsten.wetzel\Downloads\129531.xlsm").Sheets(1)
'Hier den gewünschten Bereich angeben
'     Set Rng = .Range("$A1:$B10")
Set rng = .UsedRange
'Hier das Ziel angeben
ActiveSheet.Range("$A1").Resize(rng.Rows.Count, rng.Columns.Count).value = rng.value
End With
.Quit
End With
End Sub

Gruss Torsten
Anzeige
AW: GetObject (Mappe im Hintergrund öffnen)
20.08.2019 09:33:46
Chriss
Hallo Torsten,
Danke für deinen Ansatz!
Meine Anforderung ist es lediglich die Datei im Hintergrund zu öffnen, um mit Formeln die Datei auszulesen, und dann nach einer gewissen Zeit (Abläufe dazwischen) wieder zu schließen.
D.h. ich muss nur eine Variable definieren + Set verwenden und den entsprechenden Befehl haben.
Mit simplen "Workbooks.Open" klappt es selbstverständlich wunderbar.
Aber sowohl "GetObject" als auch "CreateObject ("Excel.Application")" funktionieren nicht.
Meine Formeln (INDIREKT) in der Arbeitsmappe, in der ich den Code aktiviere, können die zu öffnende Arbeitsmappe nicht auslesen.
VG,
Chriss
Anzeige
AW: GetObject (Mappe im Hintergrund öffnen)
20.08.2019 10:15:01
Werner
Hallo Chriss,
meinst du so:
Public Sub aaa()
Dim GetObjectWB As Workbook
'Datei im Hintergrund öffnen
Application.ScreenUpdating = False
Set GetObjectWB = Workbooks.Open("M:\...\...\...\LS " & Worksheets("Tabelle1").Range("A1"). _
Value & ".xlsx")
ActiveWindow.Visible = False
'...dein weiterer Code
'unsichtbare Datei ohne speichern wieder schließen
Workbooks("LS " & Worksheets("Tabelle1").Range("A1").Value & ".xlsx").Close False
End Sub
Gruß Werner
Anzeige
AW: GetObject (Mappe im Hintergrund öffnen)
20.08.2019 13:41:30
Chriss
Hallo Werner,
ja, so habe ich mir das vorgestellt, das klappt :-)
Vielen Dank Dir!
VG,
Chriss
Gerne u. Danke für die Rückmeldung. o.w.T.
20.08.2019 13:50:35
Werner
;
Anzeige
Anzeige

Infobox / Tutorial

GetObject: Excel-Datei im Hintergrund öffnen


Schritt-für-Schritt-Anleitung

Um eine Excel-Datei im Hintergrund zu öffnen, kannst Du den Befehl GetObject verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle "Einfügen" > "Modul".

  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Dim GetObjectWB As Workbook
    Set GetObjectWB = GetObject("M:\...\...\...\LS " & Worksheets("Tabelle1").Range("A1").Value & ".xlsx")
  4. Hintergrund-Option aktivieren: Stelle sicher, dass die Datei im Hintergrund geöffnet wird. Du kannst den Bildschirmaktualisierungsmodus deaktivieren:

    Application.ScreenUpdating = False
  5. Datei schließen: Wenn Du fertig bist, schließe die Datei ohne zu speichern:

    GetObjectWB.Close False

Häufige Fehler und Lösungen

  • Fehler: "Datei kann nicht gefunden werden"
    Lösung: Überprüfe den Dateipfad und stelle sicher, dass er korrekt ist.

  • Fehler: GetObject funktioniert nicht
    Lösung: Versuche den Befehl Workbooks.Open, um sicherzustellen, dass die Datei tatsächlich geöffnet wird:

    Set GetObjectWB = Workbooks.Open("M:\...\...\...\LS " & Worksheets("Tabelle1").Range("A1").Value & ".xlsx")
  • Fehler: Sichtbare Fenster bei Verwendung von GetObject
    Lösung: Setze ActiveWindow.Visible = False, um das Fenster unsichtbar zu machen.


Alternative Methoden

Wenn GetObject nicht funktioniert, kannst Du CreateObject verwenden, um eine Excel-Instanz im Hintergrund zu öffnen:

Sub ZugriffAufGeschlosseneSeite()
    Dim rng As Range
    With CreateObject("Excel.Application")
        .Visible = False ' Fenster unsichtbar machen
        Set rng = .Workbooks.Open("C:\Users\torsten.wetzel\Downloads\129531.xlsm").Sheets(1).UsedRange
        ActiveSheet.Range("$A1").Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value
        .Quit
    End With
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele:

  1. Daten aus einer Datei im Hintergrund lesen:

    Sub DatenImHintergrundLesen()
       Dim GetObjectWB As Workbook
       Application.ScreenUpdating = False
       Set GetObjectWB = Workbooks.Open("M:\...\...\...\LS " & Worksheets("Tabelle1").Range("A1").Value & ".xlsx")
       ' Hier den benötigten Code hinzufügen
       GetObjectWB.Close False
       Application.ScreenUpdating = True
    End Sub
  2. Daten kopieren und einfügen:

    Sub DatenKopieren()
       Dim rng As Range
       With CreateObject("Excel.Application")
           .Visible = False
           Set rng = .Workbooks.Open("C:\Users\torsten.wetzel\Downloads\129531.xlsm").Sheets(1).UsedRange
           ActiveSheet.Range("$A1").Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value
           .Quit
       End With
    End Sub

Tipps für Profis

  • Speichere Deine Arbeit regelmäßig: Bei der Arbeit mit VBA kann es schnell zu Fehlern kommen. Speichere häufig, um Datenverlust zu vermeiden.
  • Nutze Kommentare: Kommentiere Deinen Code, um die Funktionalität für andere (oder Dich selbst) zu erklären.
  • Teste in einer sicheren Umgebung: Verwende eine Kopie Deiner Arbeitsmappe, um mögliche Fehler zu testen, ohne die Originaldatei zu gefährden.

FAQ: Häufige Fragen

1. Warum funktioniert GetObject manchmal nicht?
GetObject kann Probleme verursachen, wenn die Excel-Anwendung nicht korrekt läuft oder die Datei nicht vorhanden ist. Überprüfe den Pfad und die Excel-Instanz.

2. Gibt es eine Möglichkeit, eine Excel-Datei im Hintergrund zu lesen, ohne sie zu öffnen?
Nein, um Daten aus einer Excel-Datei auszulesen, muss die Datei geöffnet werden, auch wenn dies im Hintergrund geschieht.

3. Welche Excel-Version benötige ich für diese Befehle?
Die Beispiele sind in Excel 2010 und höher getestet. Achte darauf, dass Du über die entsprechenden Berechtigungen für die Datei verfügst.

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