1.7k Aufrufe
Gefragt in Tabellenkalkulation von
Ich habe ein Makro, das ich schreibgeschützt habe. Warum schreibgeschützt? Weil ich nicht möchte, dass hier irgendwas überschrieben wird.

Wenn die Datei geschlossen wird, fragt Excel aber trotzdem nach, ob die Datei gespeichert werden soll. Grundsätzlich klickt man an der Stelle sowieso nein. Klickt man auf Ja, kann man auch nur eine Kopie speichern.

Also was soll das ganze?

Ich möchte nun in meinen Code einbauen, dass das Fenster beim Schließen der Datei erst gar nicht erscheint oder im Hintergrund, ohne dass das Fenster überhaupt sichtbar wird, automatisch mit Nein beantwortet wird.

Habe das Internet nach der Frage schon auf den Kopf gestellt und alles was ich ausprobiert habe war ohne Erfolg.

Hat jemand Ideen? Kann man diese Meldung überhaupt umgehen?

6 Antworten

0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

schreibe in das VBA-Projekt deiner Arbeitsmappe den folgenden Code:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

'Arbeitsmappe wird nicht gespeichert
ThisWorkbook.Close SaveChanges:=False

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
Sub Workbook_BeforeClose(Cancel As Boolean)

ActiveWorkbook.Saved = True

End Sub

So habe ich das jetzt gemacht und das hat auch super funktioniert.

Ist Private Sub, wie Du schreibst, wichtig? Was ist der Unterschied zwischen

ActiveWorkbook.Saved = True

und

ThisWorkbook.Close SaveChanges:=False
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

mit dem Code
ActiveWorkbook.Saved = True

setzt du Saved auf wahr, Excel geht also davon aus, dass die Arbeitsmappe bereits gespeichert ist und schließt die Mappe ohne Nachfrage.

Bei
ThisWorkbook.Close SaveChanges:=False

wird die Arbeitsmappe per Makro geschlossen und die Nachfrage, ob gespeichert werden soll, wird mit Nein beantwortet.

Das Private kannst du hier auch weglassen. Private bewirkt, dass
auf die Sub-Prozedur nur durch andere Prozeduren aus dem Modul zugegriffen werden kann, in dem sie deklariert wurde.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo,

mit ActiveWorkbook.Saved = True wird Excel vorgegaukelt, das die Arbeitsmappe bereits gespeichert wäre obwohl das nicht der Fall ist.
Dies wird oft dann verwendet, wenn die Datei danach manuell geschlossen werden soll. Sobald du jedoch ThisWorkbook.Close hinzufügst um die automatisch zu schließen kannst du auch gleich den Parameter SaveChanges:=False mit angeben und somit auf den oberen Befehl verzichten.

Da es sich bei der Sub um eine Automatik-Event-Funktion von Excel handelt ist Private nicht wichtig und kann weggelassen werden. Dies bekommt erst dann eine Bedeutung wenn du verhindern willst, dass diese Sub per Code von einem Anderen Modul aus ausgeführt werden kann.

Gruß Mr. K.
0 Punkte
Beantwortet von
@ Mr. K.

Kannst Du mir evtl. ein Buch empfehlen, dass anschaulich und verständlich die Kunst der VBA Programmierung vermittelt? Woher hast Du Dein Wissen?
0 Punkte
Beantwortet von
Hallo.

Sicherlich gibt es da auch Bücher. Leider kenn ich mich da nicht aus, da mein gesamtes Wissen auf LearningByDoing basiert. Ich habe mich lediglich durch die Excel-Eigene VBA-Hilfe gelesen, welche übrigens anhand sehr guter Beispiele alle Befehle veranschaulicht. Der Rest ist Jahrelange Erfahrung.

Vielleicht hat aber jemand Anderes hier einen guten Buch-Tipp?
Gruß Mr. K.
...