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

Forumthread: VBA: Datei öffnen, kopieren, schließen (activate)

VBA: Datei öffnen, kopieren, schließen (activate)
28.09.2006 12:21:27
Klaus
Moin Forum,
ich möchte mittels Button-Druck eine xls-Datei öffen, von dort gewisse Daten kopieren und dann die Datei wieder schließen, ohne zu speichern.
Unten stehender Code (wird mit ScreenUpdating, EnableEvents, DisplayAlerts und Calculation false ausgeführt) erledigt dies bereits.
Kann mir jemand einen Typ geben, wie ich auf das lästige Activate verzichte?
Kriege ich dann auch das "Copy" und "Paste" zusammen in eine Zeile, um die Zwischenablage zu umgehen?
Dank und Gruß,
Klaus M.vdT.

Option Explicit
Sub DatenEinlesen()
Workbooks.Open FileName:="\\VERZEICHNISS\STAMMDATEN.xls", UpdateLinks:=3, Notify:=False
Sheets("Übersicht").Columns("M:T").Copy
Windows("Kontrakt.xls").Activate
Sheets("Umlauf").Range("A1").PasteSpecial Paste:=xlValues
Windows("STAMMDATEN.xls").Close
End Sub

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Datei öffnen, kopieren, schließen (activate)
28.09.2006 12:33:30
Uduuh
Hallo,
ohne Activate:

Sub DatenEinlesen()
Workbooks.Open Filename:="\\VERZEICHNISS\STAMMDATEN.xls", UpdateLinks:=3, Notify:=False
Sheets("Übersicht").Columns("M:T").Copy
Workbooks("Kontrakt.xls").Sheets("Umlauf").Range("A1").PasteSpecial Paste:=xlValues
Workbooks("STAMMDATEN.xls").Close False
Application.CutCopyMode = False
End Sub

Gruß aus’m Pott
Udo

Anzeige
AW: VBA: Datei öffnen, kopieren, schließen (activate)
28.09.2006 12:34:49
IngGi
Hallo Klaus,
Activate kannst du weglassen, wenn du dein Kopierziel über Workbook, Worksheet und Range ansprichst, also:
Workbooks("Kontrakt.xls").Sheets("Umlauf").Range("A1").PasteSpecial Paste:=xlValues
Copy und Paste bekommst du nur auf eine Zeile, wenn du alles einfügst, also nicht nur Werte, wie in deinem Makrocode:
Sheets("Übersicht").Columns("M:T").Copy Destination:=Workbooks("Kontrakt.xls").Sheets("Umlauf").Range("A1")
Um nur die Werte einzufügen, brauchst du 2 Zeilen.
Gruß Ingolf
Anzeige
Viel besser :-) aber noch nicht perfekt
28.09.2006 14:28:41
Klaus
Erstmal vielen Dank ihr beiden,
Uduuh's Code hab ich kopiert und er läuft, und dank IngGi's Erklärung hab ich ihn sogar verstanden.
Nur: der Code bleibt nicht in dem Sheet, von dem aus ich den Button zum aktivieren drücke. Ich lande in sheet Umlauf, in den auch das Paste gezielt hat. Genaugenommen lande ich ein Sheet weiter links, weil das Sheet Umlauf ausgeblendet ist.
Mal sehen ob ich das selbst zusammen bekomme:
Das "Workbooks open" ändert automatisch das aktive workbook. Wenn ich es wieder schließe, lande ich in dem zuletzt benutztem Sheet - in diesem Fall jenes,
in welches mein Paste geziehlt hat.
Ich behelf mit jetzt erstmal mit einem .select zurück auf das ursprüngliche Sheet. Hauptsache es läuft :-)
Nochmal Danke für die Hilfe, auch wenn ich diesen Code nicht select-frei kriegen sollte weiss ich jetzt zumindest um den Unterschied von Workbooks und Windows.
Gruß,
Klaus M.vdT

Option Explicit
Sub DatenEinlesen()
Sheets("Umlauf").Cells.ClearContents
Workbooks.Open FileName:="\\VERZEICHNISS\STAMMDATEN.xls", UpdateLinks:=3
Sheets("Übersicht").Columns("M:T").Copy
Workbooks("Kontrakt.xls").Sheets("Umlauf").Range("A1").PasteSpecial Paste:=xlValues
Workbooks("STAMMDATEN.xls").Close False
Application.CutCopyMode = False
Sheets("Eingaben").Select
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA: Dateien öffnen, Daten kopieren und schließen ohne Activate


Schritt-für-Schritt-Anleitung

Um eine Excel-Datei zu öffnen, Daten zu kopieren und die Datei zu schließen, ohne die Activate-Methode zu verwenden, kannst Du folgenden VBA-Code verwenden:

Option Explicit
Sub DatenEinlesen()
    ' Datei öffnen
    Workbooks.Open Filename:="\\VERZEICHNISS\STAMMDATEN.xls", UpdateLinks:=3, Notify:=False
    ' Daten kopieren
    Sheets("Übersicht").Columns("M:T").Copy
    ' Daten in die Ziel-Datei einfügen
    Workbooks("Kontrakt.xls").Sheets("Umlauf").Range("A1").PasteSpecial Paste:=xlValues
    ' Quell-Datei schließen
    Workbooks("STAMMDATEN.xls").Close False
    ' Zwischenablage leeren
    Application.CutCopyMode = False
End Sub

Dieser Code öffnet die Datei STAMMDATEN.xls, kopiert die Daten von den Spalten M bis T und fügt diese in die Datei Kontrakt.xls ein, ohne die Activate-Methode zu nutzen. Dadurch wird die Verwendung der Zwischenablage vermieden und der Vorgang läuft effizienter.


Häufige Fehler und Lösungen

  1. Fehler: "Die Datei kann nicht gefunden werden"

    • Stelle sicher, dass der Dateipfad korrekt ist und die Datei existiert.
  2. Fehler: "Zielarbeitsblatt nicht gefunden"

    • Überprüfe den Namen des Zielarbeitsblattes. Es muss exakt dem Namen im Excel entsprechen.
  3. Lösung für das Problem mit dem aktiven Blatt:

    • Wenn Du das aktive Blatt nach dem Kopieren zurücksetzen möchtest, kannst Du das ursprüngliche Blatt speichern, bevor Du das Paste durchführst. Beispiel:
      Dim ursprünglichesBlatt As Worksheet
      Set ursprünglichesBlatt = ActiveSheet
      ' ... dein Code hier ...
      ursprünglichesBlatt.Select

Alternative Methoden

Falls Du keine VBA-Makros verwenden möchtest, kannst Du auch die Power Query-Funktion in Excel nutzen, um Daten aus einer anderen Datei zu importieren. Dies ist besonders nützlich, wenn Du regelmäßig Daten kopieren möchtest, ohne ein Makro zu verwenden.

  1. Gehe zu Daten > Daten abrufen > Aus Datei > Aus Arbeitsmappe.
  2. Wähle die Datei aus und importiere die benötigten Daten.

Praktische Beispiele

Hier ist ein konkretes Beispiel, um die Funktionsweise zu verdeutlichen:

Sub BeispielDatenKopieren()
    ' Quell-Datei öffnen
    Workbooks.Open Filename:="C:\Daten\STAMMDATEN.xls"
    ' Kopieren der Daten
    Sheets("Datenblatt").Range("A1:B10").Copy
    ' Ziel-Datei und Zielbereich angeben
    Workbooks("Zielmappe.xls").Sheets("Tabelle1").Range("A1").PasteSpecial Paste:=xlValues
    ' Quell-Datei schließen
    Workbooks("STAMMDATEN.xls").Close False
End Sub

In diesem Beispiel wird der Bereich A1:B10 aus STAMMDATEN.xls in die Zielmappe.xls kopiert.


Tipps für Profis

  • Nutze die Application.ScreenUpdating-Eigenschaft, um die Bildschirmaktualisierung während des Makros zu deaktivieren. Dies kann die Ausführungsgeschwindigkeit verbessern:
    Application.ScreenUpdating = False
    ' Dein Code hier
    Application.ScreenUpdating = True
  • Wenn Du oft Daten aus einer Datei kopierst, mache einen Button in Excel und verlinke das Makro mit diesem Button für eine einfachere Bedienung.

FAQ: Häufige Fragen

1. Wie kann ich Daten aus einer Datei kopieren, ohne sie zu öffnen?

  • Du kannst die Workbooks.Open-Methode verwenden, um die Datei temporär zu öffnen, die Daten zu kopieren und sie dann sofort wieder zu schließen.

2. Ist es möglich, mehrere Bereiche gleichzeitig zu kopieren?

  • Ja, Du kannst mehrere Bereiche kopieren, indem Du sie nacheinander in verschiedenen Zeilen einfügst.

3. Wie kann ich sicherstellen, dass keine Daten verloren gehen?

  • Verwende die .Close-Methode mit dem Argument False, um zu verhindern, dass die Quell-Datei gespeichert wird, nachdem Du die Daten kopiert hast.

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