Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1392to1396
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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 :/

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

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\"

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

313 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige