Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1588to1592
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

Sicherungskopie per VBA

Sicherungskopie per VBA
16.11.2017 10:32:38
Chris
Hallo zusammen,
folgendes habe ich vor:
Ich möchte, dass beim öffnen einer Datei automatisch eine Sicherungskopie erstellt wird. Weiterhin soll automatisch in dem Speicherpfad die älteste Datei gelöscht werden.
Bisher habe ich es hinbekommen, dass eine Sicherungskopie erstellt wird und eine Datei (heute-7 Tage) gelöscht wird. Nur ist das nicht sinnvoll, da die Datei nicht täglich geöffnet wird.
Mein Ziel ist es, immer 5 Sicherungskopien zu besitzen. Keine weiteren.
Ist das möglich?
mein bisheriges Makro:
Private Sub Workbook_Open()
Dim defaultName, name_new, name_old As String
Dim today, lastWeek As String
today = Format(Date, "dd-MM-yyyy")
lastWeek = Format((Date - 7), "dd-MM-yyyy")
defaultName = "(Sicherungspfad)"
name_new = defaultName & today & ".xlsm"
name_old = defaultName & lastWeek & ".xlsm"
If File_Exists(name_new) Then Exit Sub
ActiveWorkbook.SaveCopyAs Filename:=name_new
If File_Exists(name_old) Then Kill name_old
End Sub
Public Function File_Exists(ByVal File_Path As String) As Boolean
If Dir(File_Path, vbDirectory)  vbNullString Then File_Exists = True
End Function

Danke euch.
VG
Chris

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sicherungskopie per VBA
16.11.2017 14:47:02
fcs
Hallo Chris,
kann man z.B. wie folgt lösen.
Gruß
Franz
Private Sub Workbook_Open()
Dim defaultName As String, name_new As String
Dim today As String
today = Format(Date, "dd-MM-yyyy")
defaultName = "(Sicherungspfad)"
defaultName = Me.Path & "\SK\" & Left(Me.Name, InStrRev(Me.Name, ".") - 1)
name_new = defaultName & today & ".xlsm"
If File_Exists(name_new) Then Exit Sub
Me.SaveCopyAs Filename:=name_new
Call Kill_Old_File(name_new)
End Sub
Public Function File_Exists(ByVal File_Path As String) As Boolean
If Dir(File_Path, vbDirectory)  vbNullString Then File_Exists = True
End Function
Public Sub Kill_Old_File(sFileNew, Optional maxSK As Integer = 5)
'Anzahl Sicherheitskopien prüfen, älteste ggf. löschen
'sFileNew muss wie folgt aufgebaut sein (Datum steht vor der Namenserweiterung): _
Pfad\DateinameTT-MM-JJJJ.dateierweiterung
Dim sPfad As String, sName As String
Dim intJ As Integer, arrFiles()
Dim sDatum As String, datMin As Date, intMin As Integer
Dim sDatei As String
'aus Namen Verzeichnis und Dateiname ermitteln
sPfad = Left(sFileNew, InStrRev(sFileNew, "\"))
sName = Mid(sFileNew, InStrRev(sFileNew, "\") + 1)
'im Verzeichnis nach den Dateinamen mit verschiedenen Datumswerten suchen
sDatei = Dir(sPfad & Left(sName, InStrRev(sName, ".") - 11) & "*" _
& Mid(sName, InStrRev(sName, ".")))
datMin = Date
Do Until sDatei = ""
'Datum aus dem Dateinamen schneiden
sDatum = Mid(sDatei, InStrRev(sDatei, ".") - 10, 10)
'Datum in eine Form umsetzen, die von CDate umgewandelt werden kann
sDatum = Right(sDatum, 4) & "-" & Mid(sDatum, 4, 2) & "-" & Left(sDatum, 2)
If IsDate(sDatum) Then
intJ = intJ + 1
ReDim Preserve arrFiles(1 To intJ)
arrFiles(intJ) = sDatei
'prüfen des Datums im Dateinamen auf ältestetes(kleinstest)
If CDate(sDatum)  maxSK Then
VBA.Kill (sPfad & arrFiles(intMin))
End If
End Sub

Anzeige
AW: Sicherungskopie per VBA
16.11.2017 15:52:25
Chris
Vielen Dank für deine Antwort.
Leider bekomme ich bei folgender Zeile einen Fehler im Debugger angezeigt.
Me.SaveCopyAs Filename:=name_new
Laufzeitfehler 1004
Kannst du bitte nochmals helfen?
Danke.
VG Chris
Ersetze Me durch ThisWorkbook... owT
17.11.2017 07:47:03
Peter(silie)

AW: Ersetze Me durch ThisWorkbook...
17.11.2017 09:53:07
fcs
Hallo Peter,
im Modul "DieseArbeitsmappe" bzw. "Thisworkbook" sind Me und ThisWorkbook identisch.
Gruß
Franz
AW: Sicherungskopie per VBA
17.11.2017 09:50:37
fcs
Hallo Chris,
ich hab das Makro bei mir intensiv getestet - es funktioniert.
Prüfe bei dir den Wert für defaultName.
Der angegebene Pfad muss vorhanden sein!
Gruß
Franz
AW: Sicherungskopie per VBA
17.11.2017 13:13:30
Chris
Hallo Franz,
danke für deine erneute Antwort.
Der Pfad existiert, es ist der gleiche wie in dem "alten" Makro.
Hast du eine weitere Idee?
Danke dir.
VG
Chris
Anzeige
AW: Sicherungskopie per VBA
17.11.2017 13:56:20
fcs
Hallo Chris,
wie schon geschrieben: Ich hab das Makro getestet und es funktioniert mit meinem Wert für defaultName.
Den Wert im Code in deiner Frage kann ich nicht bewerten.

defaultName = "(Sicherungspfad)"
Der Wert sollte (besser muss) den kompletten Pfad der Sicherungskopie enthalten plus den Namen der Datei vor dem anzufügenden Datum.

defaultName = Me.Path & "\SK\" & Left(Me.Name, InStrRev(Me.Name, ".") - 1)

In meinem Beispiel werden die Sicherungskopieen in einem Unterverzeichnis des Ordners gespeichert in dem die Datei gespeichert ist. Der Dateiname ist gleich dem der Original-Datei.
Da bei dir der Speichervorgang nicht funktioniert ist mit dem neuen Namen irgend etwas faul. Entweder der Pfad oder der Dateiname.
Gruß
Franz
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige