Excel Datei nicht speicherbar machen Vba?

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?

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)
Geyys72 
Fragesteller
 14.07.2020, 22:18

Vielen Lieben dank. Aber könntest du es mir mit anderen Worten erklären ? 😅

1
Geyys72 
Fragesteller
 14.07.2020, 22:19

Kann ich diesen Code von dir einfach copy and Paste machen? Und einfach dann die Datei schließen.

und gilt das für immer ?

1
Oubyi, UserMod Light  14.07.2020, 22:26
@Geyys72

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.

1
Geyys72 
Fragesteller
 14.07.2020, 22:37
@Oubyi, UserMod Light

Soll ich das speichern nachdem ich den Code eingetragen habe.
oder auf das rote X klicken ?

1
Geyys72 
Fragesteller
 14.07.2020, 22:38
@Oubyi, UserMod Light

Geht nicht, hab den Code eingegeben , gespeichert und beim schließen fragt er mich immernoch ob ich Speicher will

1
Geyys72 
Fragesteller
 15.07.2020, 00:16
@Oubyi, UserMod Light

Hab den Code eingetippt abgespeichert und die Datei geschlossen. Wieder geöffnet wollte schließen dann kam wieder die Frage ob ich speichern will .

1
Oubyi, UserMod Light  15.07.2020, 00:25
@Geyys72

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.

1
DanKirpan  15.07.2020, 09:32
@Geyys72

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"

2
Geyys72 
Fragesteller
 15.07.2020, 13:59
@DanKirpan

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.

0
Geyys72 
Fragesteller
 15.07.2020, 14:00
@DanKirpan

Schreibe ich den Code unter Modul oder „Diese Arbeitsmappe“

0
Oubyi, UserMod Light  15.07.2020, 14:02
@Geyys72

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.
0
Geyys72 
Fragesteller
 15.07.2020, 14:18
@Oubyi, UserMod Light

Ok , hab’s gemacht jz steht da beim Schließen .

Laufzeitfehler 424

Objekt erforderlich

0
Geyys72 
Fragesteller
 15.07.2020, 14:20
@DanKirpan

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 ?

0
Geyys72 
Fragesteller
 16.07.2020, 20:12
@DanKirpan

Hey könntest du einen fertigen Code erstellen welches ich nur einfügen muss ? Dankeschön wirklich ich habe voll die Probleme damit 😅

0
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
Geyys72 
Fragesteller
 15.07.2020, 17:12

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

0
DanKirpan  15.07.2020, 20:43
@Geyys72

Wenn du ohnehin Makros aktivieren musst, reicht der obere. Nur für das einfügen selbst musst du sie kurz deaktivieren, da du sonst den Code ja nicht in der Mappe speichern könntest.

0
Geyys72 
Fragesteller
 16.07.2020, 20:09
@DanKirpan

Woher weiß ich ob die aktiviert sind ?

0
DanKirpan  17.07.2020, 08:05
@Geyys72

wenn du es so Bildlink einstellst, fragt Excel dich beim öffnen ob sie aktiviert oder deaktiviert werden sollen, das dürfte die einfachste Variante für dich sein

0