Wahrscheinlich könnte man hier was mit Add-Ins basteln und wäre dann von der eigentlichen Datei unabhängig, aber wenn die Datei sowieso Makros enthält, geht auch sowas:
Dim fso As Object
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Set fso = VBA.CreateObject("Scripting.FileSystemObject")
datum = Date
zeit = Time
stunden = Left$(zeit, 2)
minuten = Mid$(zeit, 4, 2)
sekunden = Right$(zeit, 2)
zt = stunden & minuten & sekunden
file_name = ActiveWorkbook.FullName
backup_file = "C:\temp\" & Date & "_" & stunden & minuten & sekunden & "_" & ActiveWorkbook.name
Call fso.CopyFile(file_name, backup_file)
End Sub
Das Aufdröseln der Zeit ist notwendig, weil Dateinamen keine Doppelpunkte enthalten dürfen.
Beim Datum müsste man je nach Format evtl. auch sowas machen.
Hallo und DANKE,
dass sieht nun unwahrscheinlich Klasse für mich aus, da ich kein Vba kann. Aus diesem Grund hätte ich noch ein paar „blöde“ Fragen.
Wo muss nun der Speicherort eingetragen werden??? Ich denke mir im letzten Absatz. (Bite nicht lachen)
Sorry, hätte ich auch gleich dazu schreiben können:
Ersetze C:\temp\ einfach durch deinen Pfad (also „N:\04 BSM_Admin\Kopien der BSM“).
Der CopyFile-Aufruf bleibt gleich! Der verwendet ja nur die Variablen file_name (= Originalfile inkl. Pfad) und backup_file (= Sicherheitskopie)
Noch was: Das Makro muß im VBA-Editor unter „DieseArbeitsmappe“ stehen, also Doppelklick auf „DieseArbeitsmappe“ im Projektexplorer und den Code dann in dieses Fenster einfügen:
Gute Frage zt hatte ich für Debugging-Zwecke gebaut, weil - was ich jetzt nicht mehr reproduzieren kann - falsche Werte rauskamen, als ich zeit mit stunden & minuten & sekunden überschrieben hatte.
Die Zeile braucht man entweder nicht, oder könnte sie gleich zum gewünschten String zusammenbauen und selbstverständlich in der Zuweisung backup_file = ... verwenden.
Hmmm… Excel zu alt? AfterSave wird offiziell erst seit Excel 2013 unterstützt. Plan B wäre folgender:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True
Application.EnableEvents = False
If SaveAsUI = True Then
cFile = Application.GetSaveAsFilename(ActiveWorkbook.Name) & "xlsm"
If cFile <> False Then
ActiveWorkbook.SaveAs Filename:=cFile
End If
Else
ActiveWorkbook.Save
End If
ActiveWorkbook.Save
Application.EnableEvents = True
Set fso = VBA.CreateObject("Scripting.FileSystemObject")
datum = Date
zeit = Time
stunden = Left$(zeit, 2)
minuten = Mid$(zeit, 4, 2)
sekunden = Right$(zeit, 2)
zeit = stunden & minuten & sekunden
file_name = ActiveWorkbook.FullName
base_name = fso.GetBaseName(ActiveWorkbook.Name)
backup_file = "C:\temp\" & base_name & "_" & Date & "_" & zeit & ".xlsm"
Call fso.CopyFile(file_name, backup_file)
End Sub
Damit wird die Datei im Makro gespeichert und anschließend kopiert.
Das mit der Dateiendung beim Speichern ist etwas unsauber, funktioniert aber. Application.EnableEvents = False vor dem Speichern ist wichtig, damit das Makro nicht endlos aufgerufen wird. Application.EnableEvents = True nach dem Speichern ist genauso wichtig, damit das Makro auch mehrmals funktioniert.
Hallo Kannitverstan,
ich habe es mit einer leeren Tabelle probiert und es klappt einwandfrei.
DANKE DIR.
Ich habe nun nachgelesen und herausbekommen warum der Fehler in meiner Datei kommt.
Ich habe den Begriff: beforesave
nun zweimal im Makro stehen.
Das andere Makro ist:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Call prcStartTimer
End Sub
Kann man das auch anders schreiben wenn der Befehl nur einmal verwendet werden kann?
Ich weiß nicht mal was das Makro bewirkt? Oder kann ich den weglassen?
Freut mich, dass es jetzt funktioniert
Zum anderen Makro:
Du kannst nicht zwei Makros gleichen Namens haben.
Aber du kannst den Aufruf von prcStartTimer (also die Zeile Call prcStartTimer) in das zweite Makro kopieren und das erste dann löschen.
Die Zeile ruft nur ein Unterprogramm (d.h. eine Sub namens prcStartTimer) auf, die anderswo definiert ist.
Du solltest den Aufruf an den Anfang des Makros kopieren. Falls - wovon ich mal ausgehe - diese Sub noch etwas an der Datei verändert, werden diese Änderungen mit abgespeichert und auch mit ins Backup übernommen.
PS: Bitte in Zukunft direkt die Kommentare bzw. Antworten kommentieren, auf die du dich beziehst (und nicht deine eigenen). Sonst ist es - wie hier - Glückssache, ob der/diejenige überhaupt mitbekommt, dass da noch was offen ist.
Aber bei der unübersichtlichen Gestaltung dieses Forums kann man schon mal durcheinanderkommen