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

Automatisch Kopie speichern

Automatisch Kopie speichern
01.08.2016 11:23:18
Andi
Hallo,
auch wenn es zu diesem Thema bereits Fragen/ Antworten gibt, habe ich eine spezielle Herausforderung...
Aktuell nutze ich eine Lösung wie diese:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not ThisWorkbook.ReadOnly Then
ActiveWorkbook.SaveAs FileName:= _ "Pfad eingeben" & ".xls", FileFormat:=xlNormal
End Sub

Allerdings möchte ich sie um zwei Punkte ergänzen/ anpassen
- Das automatische Speichern einer Kopie soll nur erfolgen, wenn ich die original Datei speichere oder
- Wenn ich beim schließen das Original gespeichert habe.
Ist so etwas möglich?
Vielen Dank
Andreas

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatisch Kopie speichern
01.08.2016 15:09:44
Michael
Hallo Andi!
Innerhalb des Workbook-BeforeClose-Ereignisses würde ich nicht mit "ActiveWorkbook" arbeiten...
Um eine Kopie nur zu speichern, wenn die Mappe bereits gespeichert wurde, kannst Du die "Saved"-Eigenschaft der Mappe miteinbeziehen:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Pfad As String
Dim Dname As String
Pfad = "C:\Irgendwo\Anderswo\" '
Ich nutze hier auch nicht SaveAs, sondern SaveCopyAs, dafür müsstest Du allerdings im Code Pfad und Dateinamen angeben (geht auch mit flexiblen Bestandteilen.
Klappt?
LG
Michael
Anzeige
AW: Automatisch Kopie speichern
01.08.2016 16:06:51
Andi
Hallo Michael,
vielen Dank für deine Hilfe! Leider bin ich noch nicht ganz am Ziel...
Den Pfad würde ich tatsächlich hart coden, da in der Kopie das makro nicht enthalten sein soll würde ich gerne das Dateiformat auf .xls ändern - leider klappt es noch nicht, kannst du mir sagen, was ich falsch gemacht habe?
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not Me.ReadOnly And Me.Saved Then
Me.SaveCopyAs Filename:="desktop\Ubersicht.xls", FileFormat:=56
End If
End Sub
Vielen Dank!!
Andi
AW: Automatisch Kopie speichern
01.08.2016 17:01:33
Michael
Hallo!
Die Frage ist: Soll die Sicherungskopie quasi unbemerkt erstellt werden? Oder soll beim Zutreffen der Bedingungen eine Pfadauswahl bzw. ein Speicher-Dialog aufgerufen werden, in dem dann der Ziel-Pfad bzw. der gewünschte Dateiname eingegeben werden kann?
Kann ich Dir dann morgen gerne nachreichen, für heute bin ich schon weg...
LG
Michael
Anzeige
AW: Automatisch Kopie speichern
01.08.2016 17:13:07
Andi
Hallo Michael,
die Kopie soll im Hintergrund/ ohne extra Dialog abgelegt werden.
Super, vielen Dank Dir und schönen Abend
Andi
AW: Automatisch Kopie speichern
02.08.2016 10:04:15
Michael
Guten Morgen!
Also... Die Mappe soll vor dem Schließen ohne Makros in einer Sicherheitskopie gespeichert werden, wenn sie bereits einmal zwischengespeichert wurde und nicht im Nur-Lesemodus geöffnet wurde.
Du geschrieben als .xls speichern - da Du Office 2010 angibst, meinst Du vermutlich aber .xlsx - denn welchen Sinn hätte es die Sicherungskopie in einem alten Dateiformat abzulegen?
Außerdem: Wo befinden sich im Original Makros? Im Mappen-Modul, vermutlich in allgemeinen Modulen... Auch in Tabellenblatt-Modulen? Dann wird's nämlich etwas aufwändiger...
Gib Bescheid!
LG
Michael
Anzeige
AW: Automatisch Kopie speichern
02.08.2016 11:10:48
Andi
Guten Morgen Michael,
vielen Dank für deine Mühe!
richtig, die Kopie soll nur erstellt werden wenn ich die Datei zwischenzeitlich (oder am Ende - falls das noch mal ein Unterschied ist) gespeichert habe und die Datei nicht nur im Nur-Lesemodus geöffnet war.
Jup, gemeint war .xlsx.
Es handelt sich tatsächlich nur um das Kopie-Makro, das in der Datei enthalten ist. Durch das speichern als .xlsx möchte ich vermeiden das beim bearbeiten der Kopien wiederum Kopien erstellt werden. Das wollte ich durch die Änderung des Dateityps erreichen.
Vielen Dank
Andi
AW: Automatisch Kopie speichern
02.08.2016 12:30:21
Michael
Hallo!
Es handelt sich tatsächlich nur um das Kopie-Makro,
Dann ist's nicht so kompliziert, stört mich auch nicht. Versuch's mal so, Pfad müsstest Du noch anpassen:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim WbZ As Workbook
Dim Pfad$, Dname$
Pfad = "C:\DeinPfad\"
Dname = "Übersicht.xlsx"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Me
If Not .ReadOnly And .Saved Then
.Sheets.Copy
Set WbZ = ActiveWorkbook
With WbZ
.SaveAs Filename:=Pfad & Dname, FileFormat:=xlOpenXMLWorkbook, CreateBackup:= _
False
.Close True
End With
End If
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Passt?
LG
Michael
Anzeige
Und? Klappt? Gib Bescheid! LG und owT
03.08.2016 09:50:41
Michael
AW: Und? Klappt? Gib Bescheid! LG und owT
04.08.2016 13:51:58
Andi
Hallo Michael,
sorry für die späte Antwort - war noch dabei es zu verstehen und konnte es mir jetzt erst noch mal anschauen...
Klappt (fast)!
Mir ist aufgefallen, dass das Makro nur auslöst, wenn ich die Datei zwischendurch gespeichert habe, allerdings nicht, wenn ich schließe und speichere - hast du hier ebenfalls eine Idee? (Habe hierzu nichts gefunden...)
Eine Frage zum Verständnis habe ich noch - kannst du mir hierbei weiterhelfen?
- Wozu dient ".Sheets.Copy" - das Makro läuft hierdurch wesentlich länger und wenn ich es auskommentiere funktioniert es ebenfalls, nur schneller?
Vielen Dank für deine Hilfe!!
Andi
Anzeige
Achso...
04.08.2016 15:19:18
Michael
Hallo Andi!
Naja, da hab ich Dich nicht vollumfänglich verstanden... das ist dann doch aufwändiger:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Prüft vor dem Schließen dieser Mappe ob Änderungen vorliegen/gespeichert wurde
'Liegen Änderungen vor bzw. wurde noch nicht gespeichert, kann gewählt werden ob
'diese Mappe gespeichert wird - ja speichert Mappe + Sicherheitskopie, nein speichert
'weder diese Mappe noch Sicherheitskopie
'Wurde Mappe vor dem Schließen nicht verändert bzw. bereits gespeichert, dann wird keine
'Sicherheitskopie erstellt und Mappe einfach geschlossen.
Dim WbZ As Workbook
Dim Pfad$, Dname$, Info
Pfad = "U:\Test\"
Dname = "Übersicht.xlsx"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Me
If Not .ReadOnly Then
Select Case .Saved
'Mappe wurde geändert aber NICHT gespeichert
'Abfrage ob die Original-Mappe überhaupt gespeichert werden soll
Case Is = False
Info = MsgBox("Die Mappe wurde noch nicht gespeichert." & vbLf & _
"Soll diese Mappe gespeichert werden?", vbYesNo, _
"Schließen und Speichern?")
'Wenn Mappe vor dem Schließen gespeichert wird,
'dann Sicherheitskopie
If Info = vbYes Then
.Save
.Sheets.Copy
Set WbZ = ActiveWorkbook
With WbZ
.SaveAs Filename:=Pfad & Dname, _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
.Close True
End With
.Close
'Wenn Mappe vor dem SChließen NICHT gespeichert wird,
'dann KEINE Sicherheitskopie
Else:
.Saved = True
.Close
End If
'Mappe wurde NICHT geändert oder bereits gespeichert
'Dann KEINE Sicherheitskopie
End Select
End If
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Speichert eine Sicherheitskopie der Mappe (ohne Makros) bei jedem Speichern
'der Originalmappe, außer bei "Speichern unter..."
Dim WbZ As Workbook
Dim Pfad$, Dname$
Pfad = "U:\Test\"
Dname = "Übersicht.xlsx"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With Me
If Not .ReadOnly And SaveAsUI = False Then
.Sheets.Copy
Set WbZ = ActiveWorkbook
With WbZ
.SaveAs Filename:=Pfad & Dname, _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
.Close True
End With
End If
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Die kombinierten Codes machen jetzt Folgendes:
1) Bei jedem Speichern Deiner Original-Mappe, wird eine Sicherheitskopie angelegt (NICHT wenn Du das Original mit "Speichern unter" als neues Original abspeicherst) ohne Makros.
2) Vor dem Schließen der Original-Mappe wird geprüft ob Änderungen vorliegen, die noch nicht gespeichert wurden. Liegen keine Änderungen vor bzw. wurde davor irgendwann schon gespeichert, und danach nichts mehr geändert, wird die Original-Mappe einfach geschlossen und keine Sicherheitskopie erstellt. Liegen aber Änderungen in der Mappe vor muss in einem eigenen Dialog gewählt werden ob gespeichert werden soll oder nicht - bei ja wird die Original-Mappe UND eine Sicherheitskopie gespeichert, bei nein weder noch.
Ich hoffe das ist jetzt das, was Du Dir vorgestellt hast. Bzgl. ".Sheets.Copy" - das musst Du drinnen lassen... Das bedeutet nichts anderes, als dass alle Blätter der Mappe zusammen in eine neue Mappe kopiert werden und diese neue Mappe dann gespeichert wird. Das ist wichtig, um mit 2 Objekten arbeiten zu können, mit der Original-Mappe und ihrer Sicherheitskopie. Das hat zuvor nur ohne ".Sheets.Copy" funktioniert, weil wir einen Spezialfall erwischt haben - in der o.a. Konstruktion klappt das nicht mehr verlässlich.
LG
Michael
Anzeige

139 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige