[XL2003 VBA] Sub ausführen nur Before(Close and Save)

16/07/2009 - 20:00 von Jörg Eisenträger | Report spam
Hallo Excel-Freunde,

ich möchte eine Sub A in ThisWorkbook WB ausführen, und zwar nur dann,

bevor das WB manuell gespeichert und geschlossen wurde, unabhàngig
davon, wie und in welcher Reihenfolge der Nutzer den Schließen- und
Speichernbefehl ausführt (Symbolleiste, Menü, Kreuz rechts oben ...).

Wenn WB nur gespeichert wird und offen bleibt
ODER
wenn WB geschlossen wird ohne es zu speichern,
dann soll die Sub A nicht ausgeführt werden.

Sub A nimmt keine Änderungen am Workbook vor, macht ein vorheriges
Speichern also nicht zunichte.

Ich habe mit BeforeSave und BeforeClose experimentiert und bin zu keinem
vernünftigen Ergebnis gekommen.
- Erfolgt der Aufruf von A in BeforeSave, wird A auch ausgeführt, wenn
WB hinterher nicht geschlossen wird.
- Erfolgt der Aufruf von A in BeforeClose, wird A auch ausgeführt, wenn
WB vorher nicht gespeichert wurde. Die Abfrage 'If ThisWorkbook.Saved False' in BeforeClose brachte auch nichts, da BeforeClose offensichtlich
schon nach Betàtigung des Schließen-Befehls ausgeführt wird. Die Frage
nach Speichern kommt evtl. erst danach.

Mit anderen Worten: A soll erst ausgeführt werden, wenn der User dem
Programm bereits gesagt hat: "CloseFile Save=Yes". Wie finde ich diesen
Moment?

Gruß
Jörg
LPs auf CD brennen - so geht's: http://www.joergei.de/
E-Mail-Adresse existiert, wird aber nicht gelesen.
 

Lesen sie die antworten

#1 michlchen
16/07/2009 - 21:55 | Warnen spam
ich würde sagen du könntest vielleicht eine inputbox (oder msgbox geht
auch) machen und aus dem makro heraus das speichern abfragen?

activeworkbook.before_close
nochmal:
speichern = inputbox ("speichern? ja/nein eingeben. leer für abbruch")
' initial ja. weis gerade nicht, an welche stelle es muss.
' Speichern nein
if lcase(speichern) = "nein" then ' lcase, falls einer groß
schreibt...
workbook.close savechanges=false
goto ende
end if
' wenn leer = abbruch
if speichern <> "" then
exit sub
end if
' wenn nicht ja, nein oder leer...
if lcase(speichern) <> "nein" then
goto nochmal
end if
' sonst normaler ablauf
workbook.save
ende:
end sub

und das in die before close. dann sollte er nicht nach speichern
fragen, da er gerade gespeichert hat (oder aber abgebrochen bei leer
und zugemacht ohne speichern bei nein.

achtung. nicht getestet. sag mal bitte bescheid, ob es geklappt hat.

grüße aus münchen.

Ähnliche fragen