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

Forumthread: Datei kopieren

Datei kopieren
Horst
Hallo Excel-Jünger,
wie kann man per Makro eine bestehende .xls kopieren, umbennen und in einem Speicherordner ablegen? Bei der zu kopierende .xls ist derzeit die Bezeichnung und der Tabellennamen ident. Bei der Kopie soll die Bezeichnung und der Tabellenname jedoch unterschiedlich sein!
Beispiel:
A.xls mit Tabellenblatt A.xls
A.xls soll kopiert werden, neuer Name der Kopie: B.xls, das darin befindliche Tabellenblatt soll aber nicht B.xls, sondern "Tabelle 1" heißen.
Wie gehe ich am besten vor?
Gruß, Horst
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
noch Fragen,...
29.05.2011 16:09:08
Tino
Hallo,
wird die Datei verwendet die kopiert werden soll?
Wo läuft das Makro das diese Aktion ausführen soll?
Für offene Dateien würde ich die
Workbook.SaveCopyAs-Methode
verwenden.
Für geschlossene die
FileCopy-Anweisung
In beiden Fällen danach die Datei öffnen und das entsprechende Tabellenblatt umbenennen.
Datei speichern und schließen.
Gruß Tino
Anzeige
AW: noch Fragen,...
29.05.2011 16:24:48
Horst
Hallo Tino,
die Datei, die kopiert werden soll wird von einem externen Programm (kein Excel) generiert und jede Minute neu geschrieben. Von anderen Usern wird die Datei nicht verwendet bzw. geöffnet, d.h. man hat max. 60 Sekunden für den Kopiervorgang Zeit, was sich aber ausgehen sollte.
Das Makro soll in einer externen .xls laufen, also NICHT in der Datei, die kopiert werden soll.
Könntest du ein kurzes Makro reinstellen, dass die folgenden Schritte automatisiert ausführt:
Externe Datei kopieren und umbenennen
Datei öffnen, Tabellenblatt umbenennen
Datei speichern und schließen
Wäre super! Besten Dank vorab.
Horst
Anzeige
AW: noch Fragen,...
29.05.2011 18:02:19
Tino
Hallo,
ein Code dazu könnte so aussehen, Pfadangaben noch anpassen und den Tabellennamen.
Sub Test()
Dim strQuelle$, strZiel$, strNewTabname$
Dim WB_Ex As Workbook
Dim oApp As New Excel.Application

strQuelle = "C:\Ordner\A.xls" 'Quelldatei 
strZiel = "C:\Ordner\B.xls" 'Zieldatei 
strNewTabname = "B" 'Tabellenname in Ziel 

FileCopy strQuelle, strZiel

With oApp
    .EnableEvents = False
    .DisplayAlerts = False
        On Error Resume Next
        Set WB_Ex = .Workbooks.Open(strQuelle)
        If Not WB_Ex Is Nothing Then
            If Not WB_Ex.ReadOnly Then
                '1. Tabelle bekommt diesen Namen, evtl. anpassen 
                WB_Ex.Sheets(1).Name = strNewTabname
                WB_Ex.Close True
            End If
        End If
    .EnableEvents = True
    .DisplayAlerts = True
    .Quit
End With
End Sub
Gruß Tino
Anzeige
AW: noch Fragen,...
29.05.2011 19:52:58
Horst
Hallo Tino,
danke für den Code, hab ihn gerade getestet. Die Arbeitsmappe wird kopiert, allerdings steht in der Kopie wieder der gleiche Tabellenname, d.h. im gegebenen Fall heißt die kopierte Mappe "treffer.xls", Arbeitsblatt heißt ebenfalls "treffer", es sollte aber "B" heißen. Was mache ich falsch? Pfadangaben habe ich angepasst. Kann das etwas mit den Einstellungen in der Arbeitsmappe zu tun haben?
Sub Test()
Dim strQuelle$, strZiel$, strNewTabname$
Dim WB_Ex As Workbook
Dim oApp As New Excel.Application
strQuelle = "C:\Dokumente und Einstellungen\User\Desktop\Test_Order\Test_Order\hit.xls" ' _
Quelldatei
strZiel = "C:\Dokumente und Einstellungen\User\Desktop\Test_Order\Test_Order\treffer.xls" ' _
Zieldatei
strNewTabname = "B" 'Tabellenname in Ziel
FileCopy strQuelle, strZiel
With oApp
.EnableEvents = False
.DisplayAlerts = False
On Error Resume Next
Set WB_Ex = .Workbooks.Open(strQuelle)
If Not WB_Ex Is Nothing Then
If Not WB_Ex.ReadOnly Then
'1. Tabelle bekommt diesen Namen, evtl. anpassen
WB_Ex.Sheets(1).Name = strNewTabname
WB_Ex.Close True
End If
End If
.EnableEvents = True
.DisplayAlerts = True
.Quit
End With
End Sub

Anzeige
AW: noch Fragen,...
29.05.2011 20:14:35
Horst
Tino!
... was ich gerade Kurioses bemerkt habe: Startet man das Makro 2x hintereinander, ändert sich der Tabellennamen, d.h. dann funktioniert es (beim zweiten Durchlauf), sonst nicht. Wie müsste man den Code verändern, damit er einfach zweimal hintereinander startet (evtl. ein Do ... Loop einbauen?)
Gruß, Horst
Anzeige
AW: noch Fragen,...
29.05.2011 21:31:20
Tino
Hallo,
tausche bei
Set WB_Ex = .Workbooks.Open(strQuelle)
strQuelle durch strZiel aus.
Gruß Tino
AW: noch Fragen,...
29.05.2011 21:42:47
Horst
Hallo Tino,
sorry, aber das bringt leider auch nichts. Im nachfolgenden Makro heißt die kopierte Datei "test.xls" und das Tabellenblatt immer wieder "test" statt "B". Keine Ahnung was es da auf sich hat.
Sub Test()
Dim strQuelle$, strZiel$, strNewTabname$
Dim WB_Ex As Workbook
Dim oApp As New Excel.Application
strQuelle = "C:\Dokumente und Einstellungen\User\Desktop\Test_Order\Test_Order\treffer.xls" ' _
Quelldatei
strZiel = "C:\Dokumente und Einstellungen\User\Desktop\Test_Order\Test_Order\test.xls" ' _
Zieldatei
strNewTabname = "B" 'Tabellenname in Ziel
FileCopy strQuelle, strZiel
With oApp
.EnableEvents = False
.DisplayAlerts = False
On Error Resume Next
Set WB_Ex = .Workbooks.Open(strZiel)
If Not WB_Ex Is Nothing Then
If Not WB_Ex.ReadOnly Then
'1. Tabelle bekommt diesen Namen, evtl. anpassen
WB_Ex.Sheets(1).Name = strNewTabname
WB_Ex.Close True
End If
End If
.EnableEvents = True
.DisplayAlerts = True
.Quit
End With
End Sub

Gruß, Horst
Anzeige
AW: hier meine Testdateien
29.05.2011 22:20:04
Horst
Hallo Tino,
ich bin drauf gekommen, dass es mit der vom externen Programm generierten Datei zusammenhängt, die irgendwie anders aufgebaut sein dürfte als eine "manuell" erstellte .xls. Mit den downloadbaren Beispiel-Dateien gibt es keinerlei Probleme. Ich habe dir anbei mal diese ominöse "treffer.xls" upgeloadet, kannst mal ausprobieren:
https://www.herber.de/bbs/user/75072.zip
Ziel ist es, dass der Name der Datei und der Tabellennamen NICHT ident sind. Eventuell muss man die Datei auch per Makro nochmal extra unter .xls-Format abspeichern, bevor das Umbenennen des Tabellennamens funktioniert?
Option Explicit
Sub Test()
Dim strQuelle$, strZiel$, strNewTabname$
Dim WB_Ex As Workbook
Dim oApp As New Excel.Application
Dim sPath$
sPath = IIf(Right$(ThisWorkbook.Path, 1) = "\", ThisWorkbook.Path, ThisWorkbook.Path & "\")
strQuelle = sPath & "treffer.xls"   'Quelldatei
strZiel = sPath & "B.xls" 'Zieldatei
strNewTabname = "C" 'Tabellenname in Ziel
FileCopy strQuelle, strZiel
With oApp
.EnableEvents = False
.DisplayAlerts = False
On Error Resume Next
Set WB_Ex = .Workbooks.Open(strZiel)
If Not WB_Ex Is Nothing Then
If Not WB_Ex.ReadOnly Then
'1. Tabelle bekommt diesen Namen
WB_Ex.Sheets(1).Name = strNewTabname
WB_Ex.Close True
End If
End If
.EnableEvents = True
.DisplayAlerts = True
.Quit
End With
End Sub

Besten Dank für die Hilfe,
Horst
Anzeige
AW: hier meine Testdateien
29.05.2011 22:57:14
Tino
Hallo,
scheint eine nicht richtig konvertierte Datei aus einer höheren Version größer 11.0 zu sein.
Versuchen wir es so
https://www.herber.de/bbs/user/75074.zip
Gruß Tino
AW: hier meine Testdateien
29.05.2011 23:24:35
Horst
Tino!
mit vereinten Kräften haben wir's geschafft! ;-))
Es funktioniert, lag tatsächlich an der Datei.
Du bist der Größte!
Beste Grüße, Horst
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Excel-Datei kopieren und umbenennen mit VBA


Schritt-für-Schritt-Anleitung

Um eine Excel-Datei mithilfe von VBA zu kopieren, umzubenennen und ein Tabellenblatt umzubenennen, kannst du folgende Schritte befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Füge ein neues Modul hinzu: Klicke im Menü auf Einfügen und wähle Modul.

  3. Kopiere den Code: Verwende den folgenden VBA-Code und passe die Dateipfade sowie den gewünschten neuen Tabellennamen an:

    Sub DateiKopierenUndUmbenennen()
       Dim strQuelle As String, strZiel As String, strNewTabname As String
       Dim WB_Ex As Workbook
       Dim oApp As New Excel.Application
    
       strQuelle = "C:\Pfad\Zu\Deiner\Datei\A.xls" ' Quelldatei
       strZiel = "C:\Pfad\Zu\Deiner\Datei\B.xls" ' Zieldatei
       strNewTabname = "Tabelle 1" ' Neuer Tabellenname
    
       ' Datei kopieren
       FileCopy strQuelle, strZiel
    
       With oApp
           .EnableEvents = False
           .DisplayAlerts = False
           On Error Resume Next
           Set WB_Ex = .Workbooks.Open(strZiel)
           If Not WB_Ex Is Nothing Then
               If Not WB_Ex.ReadOnly Then
                   WB_Ex.Sheets(1).Name = strNewTabname
                   WB_Ex.Close True
               End If
           End If
           .EnableEvents = True
           .DisplayAlerts = True
           .Quit
       End With
    End Sub
  4. Führe das Makro aus: Drücke F5 oder gehe zu Run > Run Sub/UserForm, um das Makro auszuführen.


Häufige Fehler und Lösungen

  • Problem: Der Tabellenname bleibt gleich wie in der Quelldatei.

    • Lösung: Stelle sicher, dass du die richtige Variable (strZiel) verwendest, um die Datei zu öffnen und den Tabellennamen zu ändern.
  • Problem: Die Datei kann nicht kopiert werden, weil sie in Verwendung ist.

    • Lösung: Stelle sicher, dass die Quelldatei nicht geöffnet ist oder von einem anderen Programm verwendet wird.
  • Problem: Fehlermeldung beim Öffnen der Datei.

    • Lösung: Überprüfe, ob der Dateipfad korrekt ist und die Datei existiert.

Alternative Methoden

  • Excel-Datei duplizieren: Du kannst auch die Workbook.SaveCopyAs-Methode verwenden, um eine Kopie der Datei zu erstellen, ohne sie zu öffnen.

  • VBA-Datei kopieren und in anderen Ordner einfügen: Passe den FileCopy-Befehl an, um die Datei direkt in einen anderen Ordner zu kopieren.


Praktische Beispiele

Ein weiteres Beispiel für das Kopieren und Umbenennen einer Datei:

Sub BeispielKopieren()
    Dim strQuelle As String, strZiel As String
    strQuelle = "C:\Ordner\Original.xls"
    strZiel = "C:\Ordner\Kopie.xls"

    FileCopy strQuelle, strZiel
End Sub

In diesem Beispiel wird eine Datei namens Original.xls in Kopie.xls umbenannt.


Tipps für Profis

  • Verwende On Error GoTo anstelle von On Error Resume Next, um Fehler besser zu handhaben.
  • Füge eine Do...Loop-Schleife hinzu, falls mehrere Kopiervorgänge erforderlich sind.
  • Nutze das FileDialog-Objekt, um Benutzern die Auswahl von Dateien zu ermöglichen.

FAQ: Häufige Fragen

1. Was bedeutet .xls?
Die Dateiendung .xls steht für Excel-Arbeitsmappen, die in älteren Versionen von Excel verwendet werden.

2. Wie kann ich eine Excel-Datei kopieren und umbenennen?
Du kannst das oben bereitgestellte VBA-Skript verwenden, um eine Excel-Datei zu kopieren und den Tabellennamen zu ändern.

3. Wie funktioniert die FileCopy-Anweisung in VBA?
Die FileCopy-Anweisung in VBA wird verwendet, um eine Datei von einem Speicherort zu einem anderen zu kopieren.

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