Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Sicherheitskopie ohne Orginal zu ändern





Frage

Hallo zusammen. ich möchte gerne im Hintergrund zu bestimmten Gelegenheiten eine Sicherheitskopie der aktuellen Arbeitsmappe anlegen lassen (bei der Erfassung von Datensätzen, so alle 50 Stück z.B.). Die Sicherheitskopie soll einfach blank auf C abgelegt werden, was auch gut klappt - einziges Manko: mit Save as arbeitet der User in der Sicherheitskopie weiter und nicht im Orginal. Ich hätte gerne, dass der User gar nichts davon mitbekommt und durchweg in seiner normalen Datei arbeiten kann. Nachfolgend der Code: Sub DateiSpeichern() Dim str As String Const LW = "c:\" Const Pfad = "c:\" Dim a As String Lines = Sheets("Tabelle1").UsedRange.Rows.Count ´Dieser Block sorgt für ein Auffüllen mit Nullen im Dateinamen Select Case Lines Case Is < 10 a = "00" Case Is < 100 a = "0" End Select str = a & Lines & ActiveWorkbook.Name ChDrive LW ChDir Pfad ActiveWorkbook.SaveAs Filename:=str, FileFormat:= _ xlNormal, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=True End Sub Vielen Dank für Eure Ideen, viele Grüße, guethi

Antwort 1 von CaroS

Hallo!

Da ich alle die, die jetzt schon am
Workbooks.Open
schreiben, sowieso nicht mehr einholen werde, widme ich mich mal einem speziellen Teil der Frage.

Erstmal zur Ausgangslage. Es ist weder zu vermeiden, den Befehl
ActiveWorkbook.SaveAs
zu verwenden, noch zu verhindern, dass Excel dann in der neu angelegten Datei weiterarbeitet. Man müsste sie unmittelbar nach dem Speichern schließen, damit der Benutzer erst gar keine Änderungen mehr vornehmen kann, und dann, damit er nichts merkt, im selben Moment noch die "alte" Exceldatei neu öffnen.

Zitat:
Dass der User gar nichts davon mitbekommt
ist ein ziemlich hoher Anspruch, der kaum zu erfüllen ist, wobei das sehr stark vom Inhalt und Umfang der Datei abhängt. Ist z. B. ein Makro drin und die Makro-Sicherheitsstufe steht auf mittel, dann kommt standardmäßig die Abfrage, ob der User die Makros (de-)aktivieren will. So eine Frage sollte man im Normalfall schon mitkriegen, weil man sie ja auch beantworten muss, ebenso die zweite Frage, ob man Verknüpfungen aktualisieren will. Statt die zweite Frage interaktiv zu beantworten, könnte man dem
Workbooks.Open
einen Parameter mitgeben. Beide Fragen (und noch viel mehr) lassen sich auch mit
Application.DisplayAlerts = False
unterdrücken.

Sub SaveAs_and_RewOpen()
Dim FName_alt As String, Str_neu As String
Application.DisplayAlerts = False
FName_alt = ActiveWorkbook.FullName
FName_neu = Left(FName_alt, Len(FName_alt) - 4) & "_1.xls"
ActiveWorkbook.Save
ActiveWorkbook.SaveAs Filename:=FName_neu, FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=True
ActiveWorkbook.Close
Workbooks.Open FName_alt
Application.DisplayAlerts = True
End Sub


Nach einigem Probieren ist diese Kurzfassung eines Makros entstanden, dass man zumindest irgendwo außerhalb der zu schließenden Datei speichern muss, damit es nach dem Schließen der neuen Datei noch in der Lage ist, die alte Datei wieder zu öffnen. Die relevanten Zeilen (fett) kann man ja oben rund um den Befehl
ActiveWorkbook.SaveAs
einsetzen.

Ein gewisses Ruckeln lässt sich, glaube ich, auch mit
Application.ScreenUpdating = False
nicht verhindern, und die Zeitverzögerung durch das Speichern, Schließen und Öffnen sowieso nicht. Die hängt von der Dateigröße und der Performance des Rechners ab und bleibt selbst bei 50 kB Dateigröße nicht unbemerkt. Soviel dazu erstmal von mir.

Gruß,
CaroS

Antwort 2 von Scrat

Hab´ zwar von Deinem Script nix verstanden (hab` mich nie näher mit Makros beschäftigt), aber nur so´n Gedanke:
Kannst Du nicht die Datei via Makro speichern und die dann danach mit einem weiteren Makro-Schritt in ein Verzeichnis kopieren?
Ich hatte sowas mal in Excel hinter einem Button via Makro hinterlegt, war aber keine zeitgesteuerte Automatik, sondern ich musste jedesmal den Button anklicken.

Antwort 3 von fedjo

Hallo,
versuch es doch mal mit diesem Makro man könnte es vielleicht in bestimmten Zeitabständen starten.

Gruß
fedjo

Sub Backup_ActiveBook()
´Erstellt eine Sicherungskopie der aktiven Arbeitsmappe unter einem neuen Dateinamen

´durch Ausführen der Methode SaveCopyAs. Der neue Name bekommt den Zusatz Backup angefügt

Dim FName As String
Dim OldComment As String

´sichert die Kommentare zur Originaldatei
OldComment = ActiveWorkbook.Comments

´Fügt neue Kommentare zur Sicherungskopie hinzu
ActiveWorkbook.Comments = "Sicherungskopie von " & _
ActiveWorkbook.Name & _
", erstellt von der Backup-Prozedur."

´Name für die Sicherungskopie aus dem Namen der Originaldatei bilden
FName = Left(ActiveWorkbook.Name, _
InStr(ActiveWorkbook.Name, ".")) & _
"(backup).xls"

ActiveWorkbook.SaveCopyAs Filename:=FName
ActiveWorkbook.Comments = OldComment ´Wiederherstellen der alten Kommentare
End Sub

Antwort 4 von guethi

Vielen Dank für Eure Hilfe, ich werd mir was draus basteln!:-)

Viele Grüße,


guethi

Antwort 5 von CaroS

Hallo guethi,

mach das auf jeden Fall mit ActiveWorkbook.SaveCopyAs (AW3) und nicht mit ActiveWorkbook.SaveAs, da sparst Du Dir das ganze Zeug, was ich in AW1 beschrieben habe. SaveCopyAs ist dreimal besser, ich kannte das nur nicht.

Gruß,
CaroS

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: