Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Speichern verhindern, wenn Abbrechen geklickt wird

Forumthread: Speichern verhindern, wenn Abbrechen geklickt wird

Speichern verhindern, wenn Abbrechen geklickt wird
22.02.2019 12:24:50
Roman
Hallo zusammen,
habe folgenden Code, der soweit funktioniert, bis auf das wenn man auf Abbrechen oder Schließen klickt, die Datei trotzdem gespeichert wird. Außerdem wird bei den gespeicherten Dateien immer die Abfrage "Makros deaktiviert - Inhalt aktivieren" angezeigt, ist das normal?
Kann mir jemand helfen?
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim FilePath As String
Dim varInput As String
Dim fileSaveName As String
On Error GoTo ErrorHandler
''' This disables all Excel events.
Application.EnableEvents = False
Cancel = True
FilePath = ThisWorkbook.Path & "\"
varInput = Range("R3").Value & "_" & Range("D3").Value & "_" & "Prüfprotokoll DGUV-V3  _
Schaltschränke Deckblatt"
Filevar = FilePath & varInput & ".xlsm"
fileSaveName = Application.GetSaveAsFilename(Filevar, fileFilter:="Excel Dateien (*.xlsm), *. _
xlsm")
'ThisWorkbook.SaveAs Filename:=Filevar, FileFormat:=xlOpenXMLWorkbookMacroEnabled
'If (fileSaveName  False) Then Exit Sub
If fileSaveName  "False" Then
Application.EnableEvents = False
ThisWorkbook.SaveAs Filename:=Filevar, FileFormat:=52
Application.EnableEvents = True
Else
'//Do something - user cancelled
End If
ErrorExit:
''' This makes sure events get turned back on again no matter what.
Application.EnableEvents = True
Exit Sub
ErrorHandler:
'MsgBox "No value submitted - File Not Saved"
Resume Next
End Sub

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Speichern verhindern, wenn Abbrechen geklickt wird
22.02.2019 17:51:45
onur
Ich verstehe nicht, warum VOR dem Speichern noch ein Makro ZUM Speichern ausgeführt werden soll.
Du speicherst doch bereits.
AW: Speichern verhindern, wenn Abbrechen geklickt wird
23.02.2019 00:08:45
Roman
Damit der Name der Datei generiert wird.
AW: Speichern verhindern, wenn Abbrechen geklickt wird
23.02.2019 00:27:22
onur
False gehört nicht in Gänsefüsschen, Application.GetSaveAsFilename gibt einen Booleanwert aus, und nicht einen Text "False".
Anzeige
AW: Speichern verhindern, wenn Abbrechen geklickt wird
23.02.2019 10:02:11
Roman
Das ändert nichts an dem eigentlichen Problem, aber danke für den Tipp.
AW: Speichern verhindern, wenn Abbrechen geklickt wird
23.02.2019 10:16:43
onur
GENAU DAS IST DAS PROBLEM, aber irgendwann erkennst es evtl auch du.
Wenn du etwas VBA beherrschen würdest, würdest du debuggen können und sehen, das es nach der Änderung korrekt läuft.
Abgesehen davon sollte man ErrorHandling nur benutzen, wenn es unumgänglich ist UND man genau weiss, wie es geht.
Anzeige
AW: Speichern verhindern, wenn Abbrechen geklickt wird
23.02.2019 11:25:32
Roman
Wenn ich das... und wenn ich das..., dann würde ich hier wohl nicht fragen (Siehe Level: Excel gut - VBA nein). Aber du hast Recht, es funktioniert wirklich. Ich habe das durch so viel rumprobieren völlig übersehen, deswegen muss man nicht gleich ausfallend werden.
Jetzt habe ich nur noch ein Problem mit dem Code: Sobald man auf Speichern geht, dann auf Abbrechen und anschließend wieder auf Speichern, kommt der Speichern als Dialog nicht mehr, sondern die Datei wird nun einfach überschrieben, jedesmal wenn man auf Speichern klickt. Ist es möglich, die Abfrage jedesmal neu zu starten, sobald man auf Speichern klickt?
Und kannst du mir sagen, wie ich den ErrorHandler richtig benutze und ob ich ihn in diesem Code überhaupt benötige? Ich habe ihn mal rausgenommen, dann kommt eine Fehlermeldung beim Debuggen.
Anbei mein aktueller Code, soweit ich richtig erkannt habe, war ErrorExit bei mir sinnlos eingebaut.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim FilePath As String
Dim varInput As String
Dim fileSaveName As String
On Error GoTo ErrorHandler
''' This disables all Excel events.
Application.EnableEvents = False
Cancel = True
FilePath = ThisWorkbook.Path & "\"
varInput = Range("R3").Value & "_" & Range("D3").Value & "_" & "Deckblatt"
Filevar = FilePath & varInput & ".xlsm"
fileSaveName = Application.GetSaveAsFilename(Filevar, fileFilter:="Excel Dateien (*.xlsm), _
*.xlsm")
If fileSaveName  False Then
Application.EnableEvents = False
ThisWorkbook.SaveAs Filename:=Filevar, FileFormat:=52
Application.EnableEvents = True
Else
'//Do something - user cancelled
End If
ErrorHandler:
'MsgBox "Datei nicht gespeichert!"
Resume Next
End Sub

Anzeige
AW: Speichern verhindern, wenn Abbrechen geklickt wird
23.02.2019 11:32:30
Roman
Ok, jetzt habe ich es. Habe Application.EnableEvents = True beim ErrorHandler eingefügt.
Jetzt zu meiner letzten Frage, kann ich das Ganze auch ohne den ErrorHandler benutzen?
AW: Speichern verhindern, wenn Abbrechen geklickt wird
23.02.2019 11:44:17
onur

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim FilePath As String
Dim varInput As String
Dim fileSaveName As String
Dim Filevar
On Error Resume Next
Cancel = True
FilePath = ThisWorkbook.Path & "\"
varInput = Range("R3").Value & "_" & Range("D3").Value & "_" & "Prüfprotokoll DGUV-V3  _
Schaltschränke Deckblatt"
Filevar = FilePath & varInput & ".xlsm"
fileSaveName = Application.GetSaveAsFilename(Filevar, fileFilter:="Excel Dateien (*.xlsm), * _
. xlsm ")
Application.EnableEvents = False
If fileSaveName  False Then ThisWorkbook.SaveAs Filename:=Filevar, FileFormat:=52
Application.EnableEvents = True
Exit Sub

Anzeige
AW: Speichern verhindern, wenn Abbrechen geklickt wird
23.02.2019 11:48:25
onur
Noch besser so:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim FilePath As String
Dim varInput As String
Dim fileSaveName As String
Dim Filevar
Cancel = True
FilePath = ThisWorkbook.Path & "\"
varInput = Range("R3").Value & "_" & Range("D3").Value & "_" & "Prüfprotokoll DGUV-V3  _
Schaltschränke Deckblatt"
Filevar = FilePath & varInput & ".xlsm"
fileSaveName = Application.GetSaveAsFilename(Filevar, fileFilter:="Excel Dateien (*.xlsm), * _
. xlsm ")
Application.EnableEvents = False
On Error Resume Next
If fileSaveName  False Then ThisWorkbook.SaveAs Filename:=Filevar, FileFormat:=52
Application.EnableEvents = True
Exit Sub

Anzeige
AW: Speichern verhindern, wenn Abbrechen geklickt wird
23.02.2019 11:56:34
Roman
Danke für deine Antwort, bin gerade auch auf Resume Next gestoßen. Mein Code würde so aussehen
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim FilePath As String
Dim varInput As String
Dim fileSaveName As String
On Error Resume Next
''' This disables all Excel events.
Application.EnableEvents = False
Cancel = True
FilePath = ThisWorkbook.Path & "\"
varInput = Range("R3").Value & "_" & Range("D3").Value & "_" & "Deckblatt"
Filevar = FilePath & varInput & ".xlsm"
fileSaveName = Application.GetSaveAsFilename(Filevar, fileFilter:="Excel Dateien (*.xlsm), _
*.xlsm")
If fileSaveName  False Then
ThisWorkbook.SaveAs Filename:=Filevar, FileFormat:=52
End If
Application.EnableEvents = True
End Sub
Kann man den so lassen oder ist an deinem Vorschlag etwas besser/richtiger? Bei mir ist Resume Next weiter oben und End if habe ich drin.
Danke vorab für deine Bemühung.
Anzeige
AW: Speichern verhindern, wenn Abbrechen geklickt wird
23.02.2019 14:07:31
onur
Mein code ist dein code, nur optimiert.
;
Anzeige
Anzeige

Infobox / Tutorial

Speichern verhindern bei Abbrechen in Excel VBA


Schritt-für-Schritt-Anleitung

Um das Speichern einer Excel-Datei zu verhindern, wenn der Benutzer auf „Abbrechen“ klickt, kannst Du das folgende VBA-Skript verwenden. Es wird empfohlen, dies in einer Excel-Datei mit Makros zu tun (.xlsm):

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge den folgenden Code in das „ThisWorkbook“-Modul ein:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim FilePath As String
    Dim varInput As String
    Dim fileSaveName As String
    On Error Resume Next
    Application.EnableEvents = False
    Cancel = True
    FilePath = ThisWorkbook.Path & "\"
    varInput = Range("R3").Value & "_" & Range("D3").Value & "_" & "Prüfprotokoll DGUV-V3 Schaltschränke Deckblatt"
    Filevar = FilePath & varInput & ".xlsm"
    fileSaveName = Application.GetSaveAsFilename(Filevar, fileFilter:="Excel Dateien (*.xlsm), *.xlsm")
    If fileSaveName <> False Then
        ThisWorkbook.SaveAs Filename:=Filevar, FileFormat:=52
    End If
    Application.EnableEvents = True
End Sub
  1. Schließe den VBA-Editor und teste das Speichern der Datei.

Häufige Fehler und Lösungen

  • Problem: Datei wird auch bei „Abbrechen“ gespeichert.

    • Lösung: Stelle sicher, dass Cancel = True gesetzt ist und dass fileSaveName korrekt überprüft wird.
  • Problem: „Makros deaktiviert - Inhalt aktivieren“ erscheint.

    • Lösung: Dies ist normal, wenn Du Makros verwendest. Stelle sicher, dass Du die Datei als .xlsm speicherst und die Makros aktivierst.
  • Problem: Excel überschreibt die Datei beim zweiten Speichern.

    • Lösung: Überprüfe, ob der Cancel-Wert beim Speichern korrekt gesetzt wird und führe die Abfrage jedes Mal erneut durch.

Alternative Methoden

Wenn Du nicht mit VBA arbeiten möchtest, gibt es auch alternative Methoden:

  • Speicheroptionen anpassen: Du kannst die Excel-Einstellungen so anpassen, dass beim Speichern immer ein Dialogfeld angezeigt wird, aber dies erfordert manuelles Eingreifen.
  • Zusätzliche Makros: Du kannst auch andere Makros nutzen, die speziell auf die Handhabung von Speichervorgängen ausgelegt sind.

Praktische Beispiele

Hier sind einige praktische Anwendungsfälle für das oben genannte Skript:

  1. Prüfprotokoll DGUV-V3 speichern: Nutze dieses Skript, um automatisiert Dateinamen für Prüfprotokolle zu generieren, basierend auf bestimmten Zellwerten in Deiner Excel-Datei.

  2. Mit Bezügen zu nicht gespeicherten Dateien speichern: Stelle sicher, dass Du beim Erstellen von Prüfprotokollen stets die aktuellsten Daten verwendest und Speichervorgänge korrekt abwickelst.


Tipps für Profis

  • Debugging: Nutze Debug.Print innerhalb Deines Codes, um Variablenwerte während der Ausführung zu überwachen.

  • Error Handling: Verwende On Error GoTo für eine robustere Fehlerbehandlung, anstatt nur On Error Resume Next, um ungewollte Fehler zu vermeiden.

  • Makros optimieren: Halte Deinen Code so einfach und klar wie möglich, um die Wartung zu erleichtern.


FAQ: Häufige Fragen

1. Kann ich den Code auch ohne ErrorHandler verwenden?
Ja, es ist möglich, den Code ohne ErrorHandler zu verwenden. Allerdings kann dies dazu führen, dass Du bei einem unerwarteten Fehler keine klare Fehlermeldung erhältst.

2. Wie kann ich das Skript anpassen, um andere Dateiformate zu speichern?
Du kannst die FileFormat-Option in der SaveAs-Methode ändern. Zum Beispiel, für .xlsx Dateien, ändere FileFormat:=52 zu FileFormat:=51.

3. Ist der Code auch für Excel 365 geeignet?
Ja, der Code funktioniert in den meisten modernen Excel-Versionen, einschließlich Excel 365. Stelle sicher, dass Makros aktiviert sind.

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