Excel Datei nicht speicherbar machen Vba?
ich habe ein Programm wie ein Taschenrechner erstellt.
In den Feldern kann man zahlen eingeben und danach kommt das ergebnis.
diese soll aber als Vorlage dienen und wenn man die Anwendung schließen möchte dann soll die Frage „ Möchten Sie es speichern?“ nicht erscheinen.
Gibt es einen VBA Code welches ich schreiben kann damit die Datei nicht speicherbar ist.
also ich klicke auf das rote X und es schließt sich auch weder zu fragen noch zu speichern.
Danke
mfg
2 Antworten
Vielleicht reicht es Dir so:
ALT & F11 für den Editor/
Doppelklick auf "Diese Arbeitsmappe" -->
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True
End Sub
oder auch:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True
MsgBox ("Darf nicht verändert gespeichert werden")
End Sub
Allerdings habe ich im Moment das Problem, dass ich dann die Datei mit diesem Code auch nicht speichern kann. 😉. Ich denke Du musst vorher in der Makrosicherheit das Ausführen von Makros verhindern und dann speichern.
Natürlich kann auch jeder andere das dann so machen, aber in der Beziehung ist in Excel leider nichts sicher.
Hilft Dir das?
Du kannst den SO wie beschrieben in das große Feld im Editor einfügen, wenn Du vorher "Diese Arbeitsmappe" doppelgeklickt hast.
Versuche dann mal die Datei zu schließen. Aber mache das bitte mit einer Sicherheitskopie oder einer Testdatei.
Soll ich das speichern nachdem ich den Code eingetragen habe.
oder auf das rote X klicken ?
Geht nicht, hab den Code eingegeben , gespeichert und beim schließen fragt er mich immernoch ob ich Speicher will
Und was passiert, wenn Du auf Speichern klickst? Sind denn Makros wieder aktiviert?
Hab den Code eingetippt abgespeichert und die Datei geschlossen. Wieder geöffnet wollte schließen dann kam wieder die Frage ob ich speichern will .
Nochmal:
Sind denn Makros bei Dir aktiviert?
Wenn ja, hättest Du die Datei erst gar nicht speichern können dürfen.
Klick mal im Editor links neben das "Cancel..." sodass die Zeile braun hinterlegt wird. Damit hast Du da einen Haltepunkt gesetzt. Wenn Du jetzt versuchst zu Speichern, sollte der Code in dieser Zeile "stecken" bleiben.
Wenn das nicht passiert, wird der Code nicht ausgeführt.
Oubyi's Code gilt auch nur für das speichern,. nicht die Nachfrage beim beenden (aber sie blockiert das Speichern). Um die Meldung selbst zu unterdrücken brauchst du zusätzlich:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Saved = True
End Sub
Der ganze Code setzt natürlich voraus, das Makros aktiviert werden. Dies könnte man erzwingen indem die Mappe als Addin gespeichert wird und die Addin-Eigenschaft über
Private Sub Workbook_Open()
ThisWorkbook.IsAddin = False
ThisWorkbook.Worksheets(1).Cells(1, 1) = 1
End Sub
wieder aufhebt. Man kann die Mappe dann zwar noch öffnen ohne Makros zu aktivieren, die Tabellenblätter werden aber nicht angezeigt. Um sie selbst überhaupt speichern zu können, müsste man zudem aber noch in Oubyi's Code eine Bedingung einfügen und diese beim Öffnen herstellen, dafür ist das "ThisWorkbook.Worksheets(1).Cells(1, 1) = 1"
Hallo danke für die ausführlicher Schilderung aber ist es möglich das einmal für Dummies zu erklären.
also könntest du bitte einen Code schreiben was ich einfach copy and Paste machen könnte.
Da die Datei wie eine Vorlage ist soll man nur zahlen einsetzten und beim wieder öffnen sollen wir zahlen nicht da sein bzw. gespeichert werden .
Es soll die Datei nicht speichern und die Meldung , ob man speichern möchte nicht angezeigt werden.
Schreibe ich den Code unter Modul oder „Diese Arbeitsmappe“
Sorry, aber noch simpler kann ich es nicht erklären.
was ich einfach copy and Paste machen könnte.
Genau DAS habe ich doch beschrieben.
Ich zitiere mich:
Du kannst den SO wie beschrieben in das große Feld im Editor einfügen, wenn Du vorher "Diese Arbeitsmappe" doppelgeklickt hast.
Ok , hab’s gemacht jz steht da beim Schließen .
Laufzeitfehler 424
Objekt erforderlich
Mein Code lautet:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Saved = True
Cancel = True
End Sub
Private Sub Workbook_Open()
ThisWorkbook.IsAddin = False
ThisWorkbook.Worksheets(1).Cells(1, 1) = 1
End Sub
ist das richtig ?
Hey könntest du einen fertigen Code erstellen welches ich nur einfügen muss ? Dankeschön wirklich ich habe voll die Probleme damit 😅
Vielen Lieben dank. Aber könntest du es mir mit anderen Worten erklären ? 😅
ist es möglich das einmal für Dummies zu erklären
ich kanns versuchen:
In Oubyi's Code bedeuted das Cancel = True das eine abbrechbare Aktion nicht durchgeführt wird, da es sich in der Prozedur "Workbook_BeforeSave" befindet und diese bei einem Speicherversuch gestartet wird, wird das Speichern selbst abgebrochen.
In derselben Art wird Code in der Prozedur "Workbook_BeforeClose" ausgeführt sobald versucht wird, das Dokument zu schließen. Durch "ActiveWorkbook.Saved = True" glaubt Excel das Dokument wurde bereits gespeichert und fragt deswegen nicht nach.
Den Code jeweils in "Diese Arbeitsmappe":
Variante es als normales Dokument .xml zu speichern (dabei Makros deaktiviert haben, sonst kann du es selbst nicht speichern. Die Einstellungen dafür findest du unter Datei->Optionen->Sicherheitscenter->Einstellungen für das Sicherheitscenter->Einstellungen für Makros):
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Saved = True
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
MsgBox "Darf nicht gespeichert werden"
Cancel = True
End Sub
Für die Variante es über Speichern-Unter als Excel-Addin-In (.xlam) zu speichern um Makros zu erzwingen:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Saved = True
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If ThisWorkbook.Worksheets(1).Cells(1, 1) = 1 Then
MsgBox "Darf nicht gespeichert werden"
Cancel = True
End If
End Sub
Private Sub Workbook_Open()
ThisWorkbook.IsAddin = False
ThisWorkbook.Worksheets(1).Cells(1, 1) = 1
End Sub
Wow danke also welches Code soll ich nun einsetzten und Makros kann ich nicht deaktivieren weil ich habe Buttons die halt über Makros laufen. Wenn ich die deaktiviere würden die dann noch funktionieren
Kann ich diesen Code von dir einfach copy and Paste machen? Und einfach dann die Datei schließen.
und gilt das für immer ?