Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: 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
Anzeige

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
Anzeige
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
Anzeige
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
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Automatisch Kopie speichern in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Wähle im Projektexplorer das entsprechende Arbeitsbuch aus.
  3. Füge den folgenden Code in das ThisWorkbook-Modul ein:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim Pfad As String
    Dim Dname As String
    Pfad = "C:\DeinPfad\" ' Hier den gewünschten Pfad eingeben
    Dname = "Übersicht.xlsx" ' Name der Sicherungskopie

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    With Me
        If Not .ReadOnly And .Saved Then
            .Sheets.Copy
            Dim WbZ As Workbook
            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
  1. Schließe den VBA-Editor und teste die Funktion, indem du das Arbeitsbuch speicherst und dann schließt.

Häufige Fehler und Lösungen

  • Fehler: Makro wird nicht ausgeführt, wenn ich die Datei schließe und speichere.

    • Stelle sicher, dass du die Datei vorher gespeichert hast. Das Makro greift nur, wenn die Datei bereits gespeichert wurde.
  • Fehler: Sicherheitskopie wird nicht erstellt.

    • Überprüfe den Pfad, den du für die Sicherungskopie angegeben hast. Stelle sicher, dass der Pfad existiert und du die entsprechenden Berechtigungen hast.

Alternative Methoden

  • Excel Datei als Kopie speichern: Du kannst auch manuell über Datei > Speichern unter eine Kopie deiner Excel-Datei erstellen. Dies ist nützlich, wenn du eine Kopie von Excel-Datei erstellen möchtest, ohne VBA zu verwenden.

  • VBA Lösung für automatisches Speichern: Eine andere Möglichkeit ist das Workbook_BeforeSave-Ereignis, um eine Sicherungskopie bei jedem Speichern automatisch zu erstellen.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If Not .ReadOnly And Not SaveAsUI Then
        Call CopyWorkbook
    End If
End Sub

Private Sub CopyWorkbook()
    ' Dein Kopiercode hier
End Sub

Praktische Beispiele

  1. Kopie im Hintergrund speichern: Der oben angegebene Code speichert die Kopie im Hintergrund, ohne dass der Benutzer einen Speicher-Dialog sieht. Ideal für Nutzer, die keine redundanten Dialoge wollen.

  2. Speichern in einem anderen Speicherort: Ändere den Pfad im Code, um die Sicherungskopie an einem anderen Ort zu speichern, beispielsweise auf einem USB-Stick oder in der Cloud.


Tipps für Profis

  • Zugriffsrechte prüfen: Stelle sicher, dass der Benutzer, der das Makro ausführt, die notwendigen Berechtigungen hat, um im angegebenen Pfad zu speichern.

  • Fehlerbehandlung einbauen: Füge Fehlerbehandlungsroutinen in deinen VBA-Code ein, um mögliche Fehler beim Speichern abzufangen und dem Benutzer eine klare Rückmeldung zu geben.

  • Excel Lesemodus: Denke daran, dass das Makro nicht funktioniert, wenn die Datei im Lesemodus geöffnet ist. Du kannst dies durch eine entsprechende Abfrage im Code berücksichtigen.


FAQ: Häufige Fragen

1. Wie kann ich die Kopie deaktivieren? Du kannst das Makro einfach entfernen oder auskommentieren, um die Sicherungskopie zu deaktivieren.

2. Was ist der Unterschied zwischen SaveAs und SaveCopyAs? SaveAs überschreibt die bestehende Datei, während SaveCopyAs eine Kopie der Datei erstellt, ohne die Originaldatei zu verändern.

3. Kann ich das Makro für andere Excel-Versionen verwenden? Ja, der VBA-Code sollte in den meisten modernen Excel-Versionen funktionieren, achte jedoch darauf, dass die Syntax korrekt ist und die Funktionen unterstützt werden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige