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

Forumthread: Tabellenblatt mit VBA kopieren und in andere Datei

Tabellenblatt mit VBA kopieren und in andere Datei
12.10.2006 19:11:57
reiner
Hallo Leute,
Die Datei „DatenAlt.xls“ enthält für jeden Monat seit Jan. 2000 ein separates Tabellenblatt mit ca. jeweils 3000 Datensätzen. Inzwischen umfasst die Dateigröße mit 81 Tabellenblättern sowie Programmcode für Auswertungen auf einer UF ca. 41 MB. Auf der UF wird anhand von Optionsschaltflächen jeweils ein Jahrgang angewählt; eine ComboBox listet die diesem Jahrgang zugehörigen Tabellenblattnamen auf: (Jan., Feb.,...Nov., Dez.). Durch Markierung eines dieser Einträge wird das entsprechende Tabellenblatt kopiert und in das Tabellenblatt „Auswertung“ zur weiteren Bearbeitung kopiert. Soweit funktioniert alles wunderbar.
Zur Reduzierung der Dateigröße will ich nun alle zu einem Jahrgang gehörenden Tabellenblätter aus „DatenAlt.xls“ ausschneiden und in jeweils eine neue Datei mit dem Namen „2000.xls“ (2001.xls, 2002.xls usw. bis 2005.xls) einfügen. Die Jahrgangs- und Monatsauswahl soll weiterhin wie oben beschrieben erfolgen.
Es sind also 2 Dateien geöffnet: „DatenAlt.xls“ und z.B. „2002.xls“. Die Auswahl und das anschließende Markieren (zum Kopieren) des gewählten Tabellenblattes in „2002.xls“ funktioniert bereits. Mit dem anschließenden Einfügen in das Blatt „Auswertung“ in „DatenAlt.xls“ gibt es aber noch ein Problem.
Mit: Selection.Copy After:=Workbooks(„DatenAlt.xls“).Sheets("Auswertung")
ist es noch nicht möglich die Zieldatei anzusprechen.
Wie müsste der Code abgeändert werden?
mfg
reiner
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblatt mit VBA kopieren und in andere D
12.10.2006 21:21:50
fcs
Hallo reiner,
mir nicht ganz klar, was du genau möchtest.
Nach deiner Beschreibung möchtest du den Datenbereich in einem Monatsblatt in einer Jahresdatei in das Blatt "Auswertung" in der Datei "DatenAlt.xls" kopieren. Dein Codebeispiel, das nicht funktioniert, gilt für das Kopieren ganzer Tabellenblätter.
Ich gehe mal davon aus, dass in der Codezeile vorher der entsprechende zu kopierende Zellbereich mit Select ausgewählt ist. Dann sieht die Codezeile für das Einfügen des Zellbereiches etwa wie folgt aus:

Selection.Copy Destination:=Workbooks("DatenAlt.xls").Sheets("Auswertung").Range("A1")

Dabei ist "A1" die Zelle in der das Einfügen der Kopie des selektierten Zellbereichs beginnt.
Gruss
Franz
Anzeige
AW: Tabellenblatt mit VBA kopieren und in andere D
12.10.2006 23:11:20
reiner
Hallo Franz,
das Kopieren ist mit Deinem Vorschlag möglich und funktioniert auch. Wie lässt es sich aber darstellen dass anschließend das Tabellenblatt „Auswertung“ mit dem neu hineinkopierten Inhalt angezeigt wird?
„Workbooks.Open“ wäre wohl nicht der richtige Aufruf denn damit würde die Datei „DatenAlt.xls“ nochmals aufgerufen was aber nicht sinnvoll ist da diese Datei ja bereits gestartet wurde.
mfg
reiner
Anzeige
AW: Tabellenblatt mit VBA kopieren und in andere D
13.10.2006 00:52:52
fcs
Hallo reiner,

Workbooks("DatenAlt.xls").Activate
Sheets("Auswertung").Select

Gruss
Franz
AW: Tabellenblatt mit VBA kopieren und in andere D
13.10.2006 13:34:52
reiner
Hallo Franz,
das Einfügen der Datensätze in „DatenAlt.xls“ sowie die Anzeige des gewähltes Datenblatts funktionieren nun. Ein Problem ist momentan noch das Schließen ohne Speichern der Datei „2002.xls“ nach erfolgtem Einfügen.
Mit:
Application.DisplayAlerts = False 'Löschabfrage unterdrücken
Workbooks(„2002.xls“).Close 'Datei schließen
dauert das Schließen der Datei ca. 25 sec. – also viel zu lange.
Ohne „Application.DisplayAlerts = False“ lässt sich das Schließen zwar beschleunigen aber dafür muss ich beantworten ob die Datei zuvor gespeichert werden soll; bei Antwort „NEIN“ erfolgt eine weitere Abfrage ob die Inhalte der Zwischenablage pespeichert oder gelöscht werden sollen.
Wie also lässt sich das Schließen ohne jegliche Abfrage durchführen?
mfg
reiner
Anzeige
AW: Tabellenblatt mit VBA kopieren und in andere D
13.10.2006 13:45:54
Stefan
Hallo Reiner,
Probier das Schliessen mal mit
Workbooks("DatenAlt.xls").Close SaveChanges:=False
ohne die DisplayAlerts-Zeile.
Schoene Gruesse
Stefan
AW: Tabellenblatt mit VBA kopieren und in andere D
13.10.2006 14:28:58
reiner
Hallo Stefan,
mit Deinem Vorschlag lässt sich zwar die erste (Speicher-) Abfrage verhindern, die zweite Abfrage ob die Inhalte der Zwischenablage gespeichert oder gelöscht werden sollen, jedoch nicht.
mfg
reiner
Anzeige
AW: Tabellenblatt mit VBA kopieren und in andere D
13.10.2006 14:52:17
Stefan
Hallo Reiner,
Neuer code:
Application.CutCopyMode = False
Workbooks("DatenAlt.xls").Close SaveChanges:=False
Ich hoffe das funktioniert jetzt fuer beides, und auch in der Geschwindigkeit die Du Dir vorstellst.
Schoene Gruesse
Stefan
AW: Tabellenblatt mit VBA kopieren und in andere D
13.10.2006 15:04:30
reiner
Hallo Stefan,
Nach dem Löschen der Zwischenablage lässt sich auch die Datei ohne Nachfrage schließen.
Danke für Deinen Beitrag
mfg
reiner
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Tabellenblatt mit VBA in eine andere Datei kopieren


Schritt-für-Schritt-Anleitung

Um ein Tabellenblatt mit VBA in eine andere Excel-Datei zu kopieren, befolge diese Schritte:

  1. Öffne die Quell- und Zieldatei: Stelle sicher, dass beide Dateien, die Quell-Datei z.B. "DatenAlt.xls" und die Zieldatei, z.B. "2002.xls", geöffnet sind.

  2. Markiere das gewünschte Tabellenblatt: Wähle das Tabellenblatt aus, das du kopieren möchtest.

  3. Kopiere das Tabellenblatt: Verwende den folgenden VBA-Code, um das aktive Tabellenblatt in die Zieldatei zu kopieren:

    ActiveSheet.Copy After:=Workbooks("DatenAlt.xls").Sheets("Auswertung")
  4. Aktiviere das Zieldatei-Tabellenblatt: Um das neue Tabellenblatt anzuzeigen, verwende diesen Code:

    Workbooks("DatenAlt.xls").Activate
    Sheets("Auswertung").Select
  5. Schließe die Zieldatei ohne Speichern: Um die Zieldatei zu schließen, ohne eine Abfrage zu erhalten, füge diesen Code hinzu:

    Application.CutCopyMode = False
    Workbooks("2002.xls").Close SaveChanges:=False

Häufige Fehler und Lösungen

  • Fehler: Zieldatei nicht ansprechbar

    • Stelle sicher, dass die Zieldatei (z.B. "DatenAlt.xls") korrekt geöffnet ist und der Name exakt übereinstimmt.
  • Problem beim Schließen der Datei

    • Verwende Application.CutCopyMode = False, um die Abfragen beim Schließen der Datei zu unterdrücken.

Alternative Methoden

Falls du das Tabellenblatt in eine andere Excel-Datei kopieren möchtest, ohne den gesamten Inhalt zu kopieren, kannst du auch spezifische Bereiche kopieren:

Selection.Copy Destination:=Workbooks("DatenAlt.xls").Sheets("Auswertung").Range("A1")

Diese Methode ermöglicht dir, nur einen bestimmten Zellbereich zu kopieren.


Praktische Beispiele

Hier ein Beispiel, um ein Excel Tabellenblatt aus einer Datei in eine andere zu kopieren:

Sub KopiereTabellenblatt()
    Dim Quelle As Workbook
    Dim Ziel As Workbook

    Set Quelle = Workbooks("DatenAlt.xls")
    Set Ziel = Workbooks("2002.xls")

    Quelle.Sheets("Januar").Copy After:=Ziel.Sheets(Ziel.Sheets.Count)

    ' Aktiviere das Tabellenblatt in der Quell-Datei
    Quelle.Activate
    Quelle.Sheets("Auswertung").Select
End Sub

Dieses Skript kopiert das Tabellenblatt "Januar" aus "DatenAlt.xls" und fügt es am Ende der Zieldatei "2002.xls" ein.


Tipps für Profis

  • Nutze Variablen: Um deinen Code flexibler zu gestalten, verwende Variablen für die Dateinamen und Tabellenblattnamen.

  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen hinzu, um unerwartete Probleme zu vermeiden, etwa wenn eine Datei nicht geöffnet ist.

  • Schneller Zugriff: Verwende Application.DisplayAlerts = False, um die Benutzeroberfläche zu entlasten, wenn du viele Dateien bearbeitest.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Tabellenblätter gleichzeitig kopieren?
Du kannst eine Schleife verwenden, um durch die gewünschten Tabellenblätter zu iterieren und sie nacheinander zu kopieren.

2. Was mache ich, wenn die Zieldatei nicht geöffnet ist?
Stelle sicher, dass du die Zieldatei mit Workbooks.Open öffnest, bevor du versuchst, das Tabellenblatt zu kopieren.

3. Kann ich die Zwischenablage nach dem Kopieren leeren?
Ja, benutze Application.CutCopyMode = False, um die Zwischenablage zu leeren und die Abfrage beim Schließen der Datei zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige