Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Datei kopieren und nach Zelle benennen

Datei kopieren und nach Zelle benennen
27.11.2014 15:36:42
Lisa
Hallo zusammen.
ich würde gerne Datei "X" von \OrdnerA\ nach \OrdnerB\ kopieren.
In Zelle A1 vom Blatt1 steht das morgige Datum.
Die kopierte Datei soll nun nach A1 in Blatt1 benannt werden, sprich in etwa so:
"TTT_MM_JJ_X"
Ich habe bereits versucht eine neue Datei in \OrdnerB\ zu erstellen und alle Blätter einfach zu kopieren, bin daran aber bisher gescheitert und komme einfach nicht weiter, daher dachte ich, dass das simple kopieren der Datei vll ein besserer Ansatz sein dürfte.
Leider funktioniert der makro-recorder beim kopieren ja nicht :/

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
FileCopy
27.11.2014 18:11:38
Christian
Hallo Lisa,
das geht mit der FileCopy-Methode - siehe VBA-Hilfe
Des Weiteren würde ich bei Datum im Dateinamen zwecks Sortierung "JJJJ-MM-TT_XYZ" empfehlen. Ist aber Geschmacksache.
Bsp:
Option Explicit
Sub TestIt()
Dim strOldFile As String
Dim strNewFile As String
strOldFile = "D:\Pfad\Alt\abc.xls"
strNewFile = "C:\Pfad\Neu\" & ThisWorkbook.Sheets("Tabelle1").Cells(1, 1) & ".xls"
FileCopy strOldFile, strNewFile
End Sub 
Grüße
Christian

Anzeige
AW: FileCopy
02.12.2014 13:06:49
Lisa
Vielen Dank Christian,
Ich habe es ein wenig angepasst, aber es funktioniert noch nicht :/
Private Sub Abspeichern_Click()
Dim Datei_Neu  As String
Dim Datei_Alt  As String
Datei_Alt = "G:\Day-Ahead Prognose\PrognoseV2.xlsm"
Datei_Neu = "G:\Day-Ahead Prognose\Tagesprognose\" & ActiveWorkbook.Sheets("Prog_Master"). _
Cells(1, 1) & ".xlsm"
FileCopy Datei_Alt, Datei_Neu
End Sub

Verstehe ich das Vorgehen richtig, dass bei Datei_Neu quasi "PrognoseV2.xlsm" eingelesen wird und diese Datei dann nach "G:\Day-Ahead Prognose\Tagesprognose\" kopiert wird und unter "PrognoseV2.xlsm" & ActiveWorkbook.Sheets("Prog_Master").Cells(1, 1) & ".xlsm" abgespeichert wird?
das würde doch dann aber in etwa so aussehen, oder?
"G:\Day-Ahead Prognose\Tagesprognose\PrognoseV2.xlsm2014_12_03.xlsm"
Jedenfalls kommt die Fehlermeldung:
"Laufzeitfehler '70
Zugriff verweigert"
Die Datei ist aber nicht schreibgeschützt oder Passwort gesichert...
Liebe Grüße,
Lisa

Anzeige
AW: FileCopy
02.12.2014 17:33:35
Christian
Hallo Lisa,
vielleicht hast du meinen Hinweis auf die VBA-Hilfe ja übersehen. Dort heißt es:
Bemerkungen
Wenn Sie mit der FileCopy-Anweisung eine momentan geöffnete Datei kopieren möchten, tritt ein Fehler auf.

Des Weiteren:
- wird mit ThisWorkbook.Sheets("xyz").Cells(1, 1) & ".xls" nicht der Dateiname der alten Datei in den neuen Dateinamen übernommen, sondern damit holst du den Eintrag der Zelle "A1" im Tabellenblatt "xyz" in dieser Datei (in der das Makro enthalten ist).
- Wenn du statt dessen "ActiveWorkbook" schreibst, wird die Mappe genommen, die gerade aktiviert ist. Wenn es dort kein Tabellenblatt namens "xyz" gibt, dann wird es wieder einen Fehler geben. Und falls es das Blatt gibt, dort in Zelle A1 aber "was anderes" drinsteht, dann heißt deine kopierte Datei eben "was anderes.xls".
Wie du siehst - du musst stets wissen, was du machst.
Gruß
Christian

Anzeige
AW: FileCopy
03.12.2014 11:16:50
Lisa
hmmm... Die VBA Hilfe habe ich tatsächlich nicht registriert.
Wenn man allerdings die momentan geöffnete Datei unter einem anderen Pfad abspeichern will und zwar mit "X" und dem Datum, das aus einer Zelle entnommen werden soll - Wie soll das denn gehen?
mit der Workbook.SaveAs-Methode, sehe ich keine Möglichkeit den Pfad anzugeben, ist das richtig?
[ Ich habe shcon verstanden, dass ThisWorkbook.Sheets("xyz").Cells(1, 1) & ".xls" den Zellinhalt rauszieht und ".xls" anfügt und somit die Datei erstellt und nach dem Zellinhalt benennt. Habe wahrscheinlich das FileCopy-Prinzip mit Source und Destination falsch verstanden. ]

Anzeige
AW: FileCopy
03.12.2014 11:27:32
Lisa
Hi Christian,
Habe eben herausgefunden, dass man mit .CopyFile aktive Dateien kopieren kann. Aber wie benenne ich diese nun noch nach dem Zellinhalt um?
Dim FsyObjekt As Object
Set FsyObjekt = CreateObject("Scripting.FileSystemObject")
FsyObjekt.CopyFile "d:\eigene dateien\eigene tabellen\Jackpot.xls", "d:\eigene dateien\eigene dokumente\"

Anzeige
SaveAs und FileSystemObject.CopyFile
03.12.2014 17:51:18
Christian
hallo Lisa,
ursprünglich wolltest du eine Datei kopieren - und auch bis jetzt kann ich nur vermuten, dass du die aktuelle Datei meinst, in der du gerade arbeitest.
Zu SaveAs:
mit der Workbook.SaveAs-Methode, sehe ich keine Möglichkeit den Pfad anzugeben, ist das richtig?
Nein, das ist nicht richtig - siehe VBA Hilfe zu "SaveAs".
Bsp:

Option Explicit
Sub TestIt()
Dim strPath As String
Dim strFile As String
strPath = "C:\Neu\"
strFile = ThisWorkbook.Sheets("Tabelle1").Cells(1, 1).Value & ".xls"
ThisWorkbook.SaveAs strPath & strFile
End Sub
Wenn du aber das aktuelle Workbook mit SaveAs speicherst, arbeitest du anschließend in dieser erstellten Kopie - genau wie bei "Speichern unter ..."
Zu FileSystemObject:
Mit der CopyFile-Methode des FileSystemObject erreichst du wohl das was du willst. Und auch hier kannst du den Dateiname mit angeben - siehe MSDN-Library: http://msdn.microsoft.com/de-de/library/e1wf9e7w%28v=vs.84%29.aspx
Bsp:

Option Explicit
Sub TestIt_2()
Dim objFSO As Object
Dim strPath As String
Dim strFile As String
Set objFSO = CreateObject("Scripting.FileSystemObject")
strPath = "C:\Neu\"
strFile = ThisWorkbook.Sheets("Tabelle1").Cells(1, 1).Value & ".xls"
objFSO.CopyFile ThisWorkbook.FullName, strPath & strFile
Set objFSO = Nothing
End Sub
kommst du damit klar?
Gruß
Christian

Anzeige
AW: FileSystemObject.CopyFile -->CreateFolder
09.12.2014 14:18:15
Lisa
Hi Christian.
Genau so habe ich es nun auch gelöst...
zumindest so ähnlich :D

Private Sub Abspeichern_Click()
Dim Tag As Variant
Dim Monat As Variant
Dim Jahr As Variant
Set fso = CreateObject("Scripting.FileSystemObject")
Tag = Day(ThisWorkbook.Sheets("Prog_Master").Range("A1"))
Monat = Month(ThisWorkbook.Sheets("Prog_Master").Range("A1"))
Jahr = Year(ThisWorkbook.Sheets("Prog_Master").Range("A1"))
Zielpfad = "D:\Tagesprognose\" & Jahr & "_" & Monat & "\"
'Prognose wird abgespeichert
Windows("Prognose.xlsm").Activate
Sheets("Prog_Master").Activate
If Tag 
allerdings habe ich jetzt noch das Problem, einen Ordner für jeden Monat zu erstellen.
Ich bin bisher soweit, dass es einen Ordner nach dem Datum erstellt und die Datei darin abspeichert:
fso.createfolder ("D:\Tagesprognose\" & Jahr & "_" & Monat)
Nun bin ich dran eine Abhängigkeit einzubauen, die prüft ob der Ordner bereits vorhanden ist.
Im Prinzip wie folgt:
Prüfe ob Ordner vorhanden ist
->nein
->Erstelle Ordner (wie oben beschrieben)
->ja
->speicher Datei in bestehenden Ordner ab

Anzeige
AW: FileSystemObject.CopyFile -->CreateFolder
09.12.2014 14:42:03
Lisa
Kurzes Update:
war einfacher als gedacht und v.a. als überall recherchiert :D
If Not fso.FolderExists(Zielpfad) Then
fso.createfolder ("D:\Tagesprognose\" & Jahr & "_" & Monat)
End If
jetzt nur noch die Monate

AW: FileSystemObject.CopyFile -->CreateFolder
09.12.2014 15:27:16
Lisa
funktioniert soweit alles =)
    Dim Tag As Variant
Dim Monat As Variant
Dim Jahr As Variant
Set fso = CreateObject("Scripting.FileSystemObject")
Tag = Day(ThisWorkbook.Sheets("Prog_Master").Range("A1"))
Monat = Month(ThisWorkbook.Sheets("Prog_Master").Range("A1"))
Jahr = Year(ThisWorkbook.Sheets("Prog_Master").Range("A1"))
If Monat 

umständlich... aber funktioniert :)
Gruß an alle, denen das hier weiter hilft.
(und natürlich an Christian, vielen Dank)
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

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

  2. Neues Modul einfügen: Klicke im Projekt-Explorer mit der rechten Maustaste auf deine Arbeitsmappe, wähle Einfügen und dann Modul.

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

    Option Explicit
    Sub DateiKopierenUndUmbenennen()
        Dim objFSO As Object
        Dim strOldFile As String
        Dim strNewFile As String
        Dim Zielpfad As String
    
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        strOldFile = "G:\Day-Ahead Prognose\PrognoseV2.xlsm"
        Zielpfad = "G:\Day-Ahead Prognose\Tagesprognose\"
        strNewFile = Zielpfad & ThisWorkbook.Sheets("Prog_Master").Cells(1, 1).Value & ".xlsm"
    
        ' Datei kopieren
        objFSO.CopyFile strOldFile, strNewFile
        Set objFSO = Nothing
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und führe das Makro aus, um die Datei zu kopieren und nach dem Zellinhalt umzubenennen.


Häufige Fehler und Lösungen

  • Laufzeitfehler '70 - Zugriff verweigert': Dieser Fehler tritt auf, wenn du versuchst, eine geöffnete Datei mit FileCopy zu kopieren. Stelle sicher, dass die Datei geschlossen ist oder verwende objFSO.CopyFile, um diese zu kopieren.

  • Falscher Dateiname: Überprüfe, ob das Blatt und die Zelle, aus der du den Namen ziehen möchtest, korrekt angegeben sind. ThisWorkbook.Sheets("Prog_Master").Cells(1, 1).Value zieht den Inhalt der Zelle A1 aus dem entsprechenden Blatt.


Alternative Methoden

  1. Verwendung von Workbook.SaveAs: Anstatt die Datei zu kopieren, kannst du auch die SaveAs-Methode verwenden, um die aktuelle Arbeitsmappe unter einem neuen Namen zu speichern:

    ThisWorkbook.SaveAs Filename:=Zielpfad & ThisWorkbook.Sheets("Prog_Master").Cells(1, 1).Value & ".xlsm"
  2. Direktes Kopieren mit FileCopy: Wenn du eine Datei ohne Umbenennung kopieren möchtest, kannst du einfach FileCopy verwenden:

    FileCopy "G:\Day-Ahead Prognose\PrognoseV2.xlsm", "G:\Day-Ahead Prognose\Tagesprognose\PrognoseV2_Copy.xlsm"

Praktische Beispiele

Hier sind einige praktische Beispiele, um die copyfile vba-Funktion effektiv zu nutzen:

  • Beispiel 1: Kopieren und Umbenennen mit Datum:

    Dim strNewFile As String
    strNewFile = Zielpfad & Format(Date, "YYYY-MM-DD") & "_Prognose.xlsm"
    objFSO.CopyFile strOldFile, strNewFile
  • Beispiel 2: Ordner erstellen, wenn nicht vorhanden:

    If Not objFSO.FolderExists(Zielpfad) Then
        objFSO.CreateFolder Zielpfad
    End If

Tipps für Profis

  • Wähle den richtigen Dateipfad: Achte darauf, dass der Dateipfad korrekt ist und die notwendigen Berechtigungen für den Zugriff auf den Ordner vorhanden sind.

  • Nutze Fehlerbehandlung: Implementiere Fehlerbehandlung in deinem VBA-Code, um unerwartete Fehler abzufangen und zu lösen. Zum Beispiel:

    On Error Resume Next
    ' Dein Code hier
    If Err.Number <> 0 Then
        MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
    End If
    On Error GoTo 0

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die kopierte Datei nicht überschrieben wird?
Du kannst vor dem Kopieren prüfen, ob die Datei bereits existiert:

If Not objFSO.FileExists(strNewFile) Then
    objFSO.CopyFile strOldFile, strNewFile
Else
    MsgBox "Die Datei existiert bereits."
End If

2. Kann ich das Datum im Dateinamen anpassen?
Ja, du kannst das Datum formatieren, wie du möchtest. Nutze die Format-Funktion:

strNewFile = Zielpfad & Format(Date, "DD_MM_YYYY") & "_Prognose.xlsm"

Indem du diese Schritte befolgst, kannst du effizient eine Excel-Datei kopieren und umbenennen, und das Programmieren in VBA wird dir helfen, viele Aufgaben zu automatisieren.

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