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

Excel / VBA Optimierung

Excel / VBA Optimierung
28.09.2021 16:48:37
Excel
Hallo zusammen,
ich möchte niemanden langweilen und komme deswegen direkt zur Sache:
Ich habe ein Excel-Zeiterfassungstool erstellt, in welchem bereits mehrere, funktionierende Makros laufen. Bei einer Sache bräuchte ich allerdings Unterstützung:
Ich möchte einen VBA Code schreiben, welcher
a) in dem Verzeichnis, in welchem die Excel Datei aktuell gespeichert ist einmalig einen versteckten Ordner anlegt, sofern dieser nicht schon existiert, welcher "[Backup | Zeiterfassungstools]" heißt und
b) bei jedem Öffnen der Excel Datei (des Zeiterfassungstools) eine ebenfalls versteckte Backupdatei mit dem Namen "[Backup] + Name der zu sichernden Backupdatei" im Backup Ordner anlegt, welche bei jedem weiteren Öffnen der Excel Datei (des Zeiterfassungstools) überschrieben werden soll.
Folgenden Code habe ich bereits geschrieben, welcher eine Backupdatei (versteckt) anlegt...

Sub BackUp()
'Erstellt ein Backup der aktuell geöffneten Excel-Datei auf demselben Pfad
ThisWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & _
"\" & "[Backup]" & " " & _
ThisWorkbook.Name
'Versteckt die Backup-Datei
SetAttr ThisWorkbook.Path & _
"\" & "[Backup]" & " " & _
ThisWorkbook.Name, vbHidden
End Sub
a) Wie schaffe ich es, dass die so erstellte Backup Datei wie oben beschrieben in einem Backup Ordner gespeichert werden?
b)...leider kommt es beim zweiten Öffnen und damit Anlegen der versteckten Backupdatei zu einem Laufzeitfehler. Kommentiere ich das "verstecken" im Code aus, funktioniert alles und die Backup-Datei wird ganz normal überschrieben.
Wie lässt sich das verhindern?
Vielen Dank für eure Unterstützung!
Gruß
Excel Friend

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel / VBA Optimierung
28.09.2021 18:40:38
ralf_b
was hindert dich den Gedanken zu ende zu denken. Wenn das Verstecktsein dich hindert die Datei zu überschreiben, dann brauchst du sie nur mal kurz wieder sichtbar zu machen. In dem Moment wird schon keiner im Backupordner lauern und die Datei klauen. Andererseits frage ich mich warum man eine Backupdatei überschreiben will? Wenn's paar mehr Backups sind, kann man die llöschen aber direkt überschreiben, hmmm, naja.
AW: Excel / VBA Optimierung
28.09.2021 20:47:00
Excel
Hallo Ralf,
danke für deinen Input. Die Idee das Attribut der zuletzt erstellten Backup Datei anzupassen, sodass diese überschrieben werden kann war an sich gut. Leider ist dies hier aber nicht möglich, da beim erstmaligen Öffnen der Excel logischerweise noch kein Backup existiert und daher auch keine solche Datei "wieder sichtbar" i.S.v. vbNormal gemacht werden kann. Dies führt spätestens beim Schritt 1 zu einer Fehlermeldung (siehe unten).
Hier zur Veranschaulichung der Ablauf des Codes:

Schritt 1:
'Offenbart die alte Backup-Datei
SetAttr ThisWorkbook.Path & _
'"\" & "[Backup]" & " " & _
ThisWorkbook.Name, vbNormal
Schritt 2
'Erstellt ein Backup der aktuell geöffneten Excel-Datei auf demselben Pfad
ThisWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & _
"\" & "[Backup]" & " " & _
ThisWorkbook.Name
Schritt 3
'Versteckt die neue Backup-Datei
SetAttr ThisWorkbook.Path & _
"\" & "[Backup]" & " " & _
ThisWorkbook.Name, vbHidden
Super wäre natürlich, wenn ein Code existiert mit dem man den ersten Schritt erst beim zweiten Öffnen der Excel ausführen kann.
Tausche ich die Schritte 1 und 2 von der Reihenfolge bekomme ich komischerweise beim zweiten Öffnen (also nachdem erfolgreich die erste Backup-Datei erstellt wurde) einen Laufzeitfehler (siehe Screenshot).
Userbild
Ziel des Backup-Verfahrens ist es, immer die letzte funktionierende Version der Excel Datei abzuspeichern. Sollte es jemand schaffen, die Excel Datei wie auch immer kaputt zu machen, sodass diese sich nicht mehr öffnet, würde der Backup Code auch nicht ausgeführt werden und es kann auf die zuletzt funktionierende Excel Datei zugegriffen werden, bei welcher der Code noch ausgeführt wurde.
Ich kann nicht jedes Mal beim Öffnen eine neue Backup Datei erstellen, da die Datei von mehreren Personen genutzt wird, bis zu 80 Mal pro Tag geöffnet wird, über Jahre hinweg genutzt und zentral auf einem Consumer-PC gespeichert wird.
Da wäre selbst die größte Festplatte früher oder später voll. Manuelles löschen kommt nicht infrage, da ich dies nicht kontrollieren kann.
Gruß
Excel Friend
Anzeige
AW: Excel / VBA Optimierung
28.09.2021 20:50:00
ralf_b
selbstverständlich muß der Programmierer solche Dinge berücksichtigen und eine Fehlerbehandlung einfügen oder die Existenz abprüfen.
AW: Excel / VBA Optimierung
28.09.2021 21:27:32
Excel
In diesem Fall leider schon ;)
Irgendwelche Ideen?
AW: Excel / VBA Optimierung
28.09.2021 22:38:47
Excel
Grundsätzlich würde es mir potenziell schon weiterhelfen, wenn ich weiß wie ich die Backup Datei dateipfadunabhängig in den Backup Order gespeichert bekomme. Dadurch könnte sich das Problem mit dem Überschreiben aufgrund ungleicher Dateieigenschaften möglicherweise lösen lassen.
Konkret:

(1)
'Erstellt einen Ordner im Verzeichnis der aktuell geöffneten Datei
Dim strPfad As String
strPfad = ThisWorkbook.Path
If strPfad > "" Then
If Dir(strPfad & "\[Backups]", vbDirectory) = "" Then MkDir strPfad & "\[Backups]"
Else
MsgBox "Datei ist noch nicht gespeichert."
End If
(2)
'Erstellt ein Backup der aktuell geöffneten Excel-Datei auf demselben Pfad der aktuell geöffneten Datei
ThisWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & _
"\" & "[Backup]" & " " & _
ThisWorkbook.Name
Wie kann ich die Backupdatei (2) im neu erstellten Ordner (1) abspeichern und das unabhängig von Dateipfad?
Anzeige
AW: Excel / VBA Optimierung
29.09.2021 07:12:18
MCO
Moin!
Im Grunde bist du doch schon fertig:
Ordner festlegen
prüfen ob ordner existiert -- ggf anlegen.
prüfen ob datei existiert -- ggf. löschen (fehlt noch bei Dir)
Datei ablegen.
Gruß, MCO
AW: Excel / VBA Optimierung
30.09.2021 11:52:05
Excel
Moin MCO!
Ja, nur dass ich deinen letzten Punkt nicht hinbekomme (Datei ablegen). Ich tue mir etwas schwer den Speicherpfad der Backupdatei mit der .SaveCopyas Funktion auf den des Ordners zu münzen. Konkret: Wie bekomme ich die Datei in den Ordner? Kann jemand bitte den Code unten entsprechend anpassen?
(2)

'Erstellt ein Backup der aktuell geöffneten Excel-Datei auf demselben Pfad der aktuell geöffneten Datei
ThisWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & _
"\" & "[Backup]" & " " & _
ThisWorkbook.Name
Irgendwo muss ich in der obigen Funktion doch den Speicherpfad um "\[Backups]" ergänzen können, stimmts?
Vielleicht ist die Antwort ja ganz leicht und ich bin einfach nur zu blöd :/
Anzeige
AW: Excel / VBA Optimierung
30.09.2021 15:54:42
Yal
Hallo Excel (man spricht sich im Forum per Vornamen an ;-)
don't reinvent the wheel: Du muss nur die Windows-Funktion richtig einsetzen (wenn ich davon ausgehen darf, dass es Dir nicht darum geht, deine VBA-Programmierkompetenz zu erweitern):
Wenn Du auf einer Datei im Win-Explorer rechtklickst, siehst Du einen "Vorgängerversionen wiederherstellen". Diese funktioniert nur, wenn vorab die Funktion der "Dateiversionsverlauf" auf dem Rechner bzw. Netzlaufwerk eingeschaltet ist. Siehe:
https://support.microsoft.com/de-de/windows/sichern-und-wiederherstellen-in-windows-352091d2-bb9d-3ea3-ed18-52ef2b88cbef
Es sollte auch einstellbar sein, mit welcher Taktung (vielleicht sogar pro "neue Version") gespiegelt werden soll. Auch die maximale Dauer des Behalten, in Zeit oder Anzahl von Versionen, sollte einstellbar sein (kann auf meinem zentralverwalteten Rechner nicht reinkommen).
Da diese Mechanismus für eine Excel-Datei ein Deduplizierungsalgorithmus verwendet, wird tatsächlich, trotz verschiedene sichtbare "Versionen", nur die einzelne Änderungen gespeichert, sodass die Festplatten-Belegung optimiert ist (was bei max 50 EUR/TB sowieso nicht die Rede Wert ist).
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige