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

getObject

Forumthread: getObject

getObject
31.08.2007 22:57:12
Holger
Hallo liebe Forumianer,
kann mir evtl. jemand helfen. Ich habe ein Workbook("allg1") aus dem ich ein sheet ("D12") gerne in das Workbook ("aus1") kopieren möchte. Dies wäre noch kein Problem für mich, dieses Kopieren sollte aber im "Hintergund" laufen. Aus dem Archiv habe ich heraus lese´n können das getObject ein WB minimiert öffnen kann ohne das man irgend etwas davon sieht. Das wäre genau "mein" Ding, nurbekomme ich den Code irgendwie nicht wirklich hin. Kann mich da jemand unterstützen?
Die WB´s liegenbeide auf "E:\WP\.."
Danke und Gruß
Holger

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: getObject
01.09.2007 09:20:40
Beverly
Hi Holger,
versuche es nach diesem Prinzip

Sub kopieren()
Dim wbMappe As Excel.Workbook
Set wbMappe = GetObject("E:\WP\aus1.xls")
' hier dein Kopierbefehl
wbMappe.Close
Set wbMappe = Nothing
End Sub


________________________________________

Anzeige
AW: getObject
01.09.2007 22:36:00
Holger
Hallo Beverly,
komm da mit nicht klar,

Sub kopieren()
Dim wbMappe As Excel.Workbook
sheets("D12").select
selection.copy
Set wbMappe = GetObject("E:\WP\aus1.xls")
' hier dein Kopierbefehl
Application.CutCopyMode = False
wbMappe.Close
Set wbMappe = Nothing
End Sub


kannst du mir noch weiterhelfen?
Wäre Dir sehr dankbar.
Gruß und Dank
Holger

Anzeige
AW: getObject
02.09.2007 00:29:25
Nepumuk
Hallo Holger,
wenn du in die per GetObject geöffnete Mappe etwas kopieren und dann speichern willst, dann ist das der falsche Weg. Denn wenn du diese Mappe wieder öffnest, ist sie ausgeblendet. Du könntest natürlich die Mappe vor dem speichern einblenden, aber dann kannst du auch genauso gut die Mappe "normal" öffnen, kopieren, speichern und schließen. Wenn du die Bildschirmaktuallisierung ausschaltest, dann sieht der User von der ganzen Aktion nur ein kurzes zucken in der Taskleiste. Vor allen Dingen, wenn du bei der Aktion auf so unsinnige Methoden wie Select und Activate verzichtest.
Gruß
Nepumuk

Anzeige
AW: getObject
02.09.2007 09:53:01
Beverly
Hi Holger,
Nepumuk hat schon Recht - die so geöffnete Arbeitsmappe bleibt "unsichtbar", auch wenn man sie anschließend von Hand öffnet. Wenn man unter den Eigenschaften in DieseArbeitsmappe IsAddin auf True und dann wieder auf False setzt, ist sie allerdings wieder "sichtbar". Es ist also die Frage, ob du sie auch irgendwann mal wieder direkt benutzen möchtest, dann ist der andere Weg, die Bildschirmaktualiserung aus- und wieder einzuschalten der bessere.
Aber zu deiner eigentlichen Frage

Sub kopieren()
Dim wbMappe As Excel.Workbook
Set wbMappe = GetObject("E:\WP\aus1.xls")
With wbMappe.Worksheets("Tabelle1")
ThisWorkbook.Worksheets("Tabelle1").Range("A1:A10").Copy .Range("A1")
End With
wbMappe.Close
Set wbMappe = Nothing
End Sub


Bis später,
Karin

Anzeige
AW: getObject
02.09.2007 10:04:00
Nepumuk
Hallo Karin,
Wenn man unter den Eigenschaften in DieseArbeitsmappe IsAddin auf True und dann wieder auf False setzt, ist sie allerdings wieder "sichtbar".
Das ist so nicht korrekt, denn diese Eigenschaft wird ja nicht gesetzt. Die Mappe ist einfach nur ausgeblendet und kann über die Menüleiste - Fenster - Einblenden wieder sichtbar gemacht werden. Genauso wie z.B. die PERONL.XLS.
Gruß
Nepumuk

Anzeige
AW: getObject
02.09.2007 10:50:00
Beverly
Hi Nepumuk,
da ein Add-In ebenfalls nicht sichtbar ist, funktionert es auch auf diesem Weg, denn man setzt die Eigenschaft und hebt sie wieder auf. Der einfachere Weg ist natürlich Fenster -&gt Einblenden.
Bis später,
Karin

Anzeige
AW: getObject
02.09.2007 10:56:00
Nepumuk
Hallo Karin,
hast du das getestet? Bei mir blendet sich da nix ein. ;-)
Gruß
Nepumuk

AW: getObject
02.09.2007 11:52:00
Beverly
Hi Nepumuk,
ja, habe ich, in 2002 und 2007. Die "verstecke" Arbeitsmappe wird wieder sichtbar und ist die aktive.
Bis später,
Karin
Anzeige
;
Anzeige

Infobox / Tutorial

Verwendung von GetObject in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Ö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")
  2. 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")
  3. Schließen der Arbeitsmappe: Vergiss nicht, die geöffnete Arbeitsmappe zu schließen und die Objektvariablen zu setzen:

    wbMappe.Close
    Set wbMappe = Nothing
  4. 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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige