Discussion:
Workbook close abfangen
(zu alt für eine Antwort)
werner Paczkowski
2004-08-18 09:08:29 UTC
Permalink
Ein Hallo an alle!

In einer erstellten Vorlage sollen Daten von einem User
eingetragen werden.

Bevor er das mit seinen Dateneinträgen gefüllte Workbook
schließt (Dto: speichern, speichern unter) erfolgt
mittels VBA Code vor dem Schließen eine Abfrage, ob er
alle Datenfelder mit Einträgen gefüllt hat. Wenn nicht,
soll der von ihm vorher ausgelöste Excel Prozess, "Datei
Speichern", "Datei Speichern unter", "Datei Schließen"
(ggf. auch durch Betätigung des oberen rechten "X" =
Excel "Schließen Buttons") abgebrochen werden, um dem
User die Möglichkeit zu geben, die fehlenden Daten in dem
aktiven Sheet direkt zu ergänzen.

Leider gelingt es mir nicht die ausgelösten o. g. Excel
Prozesse zu stoppen, um auf dem aktiven Sheet, zwecks
Ergänzung der Daten, zu verbleiben. Soll heissen, das
Workbook wird von Excel geschlossen, bzw. es erfolgt die
Eingabeaufforderung ob das Workbook mit oder ohne
Speicherung geschlossen, oder der Vorgang abgebrochen
werden soll, welche ich unterdrücken möchte.

Der Versuch mittels Application.SendKeys auf die Button
der Eingabeforderung, zum Beispiel auf "Abbrechen"
Einfluss zu nehmen, oder ggf. die Simulation der ESC
Taste um dem Excel Prozess abzubrechen, scheitern in der
Makro Programm-ausführung.


Die Steuerung der Abfrage erfolgt bei mir mittels Makro
im VBA Projekt "Diese Arbeitsmappe" mit der Funktion:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

oder ggf. alternativ mit:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As
Boolean, Cancel As Boolean)

Hiernach folgen diverse Zellenbereichsabfragen ob die
Dateneinträge vorhanden sind, wenn nicht, dann erfolgt
ein Goto zu der Meldung_2
'---------------------------------------------------------
-----------

Meldung_2:
F6 = MsgBox("Bitte ergänzen Sie ihre Ausstellerdaten, da
diese nicht vollständig
eingetragen sind", vbOKOnly + vbQuestion,
_"Ausstellerdaten unvollständig")

If F6 = vbOK Then
[Zelle_fehlender_Eintrag].select

Application.DisplayAlerts = False

Exit Sub
Dank vorab

wer_pa
stefan onken
2004-08-18 09:22:53 UTC
Permalink
hallo Werner,
bei BeforeClose und BeforeSave gibt es die Variable
Cancel. Die mußt du auf True setzen, um das
Schließen/Speichern zu verhindern, etwa so:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
F6 = MsgBox("Bitte ergänzen etc", _
vbOKOnly + vbQuestion, _
"Ausstellerdaten unvollständig")
If F6 = vbOK Then
Cancel = True
[Zelle_fehlender_Eintrag].Select
End If
End Sub

Gruß
stefan
-----Originalnachricht-----
Ein Hallo an alle!
In einer erstellten Vorlage sollen Daten von einem User
eingetragen werden.
Bevor er das mit seinen Dateneinträgen gefüllte Workbook
schließt (Dto: speichern, speichern unter) erfolgt
mittels VBA Code vor dem Schließen eine Abfrage, ob er
alle Datenfelder mit Einträgen gefüllt hat. Wenn nicht,
soll der von ihm vorher ausgelöste Excel Prozess, "Datei
Speichern", "Datei Speichern unter", "Datei Schließen"
(ggf. auch durch Betätigung des oberen rechten "X" =
Excel "Schließen Buttons") abgebrochen werden, um dem
User die Möglichkeit zu geben, die fehlenden Daten in
dem
aktiven Sheet direkt zu ergänzen.
Leider gelingt es mir nicht die ausgelösten o. g. Excel
Prozesse zu stoppen, um auf dem aktiven Sheet, zwecks
Ergänzung der Daten, zu verbleiben. Soll heissen, das
Workbook wird von Excel geschlossen, bzw. es erfolgt die
Eingabeaufforderung ob das Workbook mit oder ohne
Speicherung geschlossen, oder der Vorgang abgebrochen
werden soll, welche ich unterdrücken möchte.
Der Versuch mittels Application.SendKeys auf die Button
der Eingabeforderung, zum Beispiel auf "Abbrechen"
Einfluss zu nehmen, oder ggf. die Simulation der ESC
Taste um dem Excel Prozess abzubrechen, scheitern in der
Makro Programm-ausführung.
Die Steuerung der Abfrage erfolgt bei mir mittels Makro
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As
Boolean, Cancel As Boolean)
Hiernach folgen diverse Zellenbereichsabfragen ob die
Dateneinträge vorhanden sind, wenn nicht, dann erfolgt
ein Goto zu der Meldung_2
'--------------------------------------------------------
-
-----------
F6 = MsgBox("Bitte ergänzen Sie ihre Ausstellerdaten, da
diese nicht vollständig
eingetragen sind", vbOKOnly + vbQuestion,
_"Ausstellerdaten unvollständig")
If F6 = vbOK Then
[Zelle_fehlender_Eintrag].select
Application.DisplayAlerts = False
Exit Sub
Dank vorab
wer_pa
.
werner paczkowski
2004-08-19 07:03:14 UTC
Permalink
Hallo Stefan,

vielen Dank für den Tip.

Klappt prima.

Gruß

wer_pa
-----Originalnachricht-----
hallo Werner,
bei BeforeClose und BeforeSave gibt es die Variable
Cancel. Die mußt du auf True setzen, um das
Private Sub Workbook_BeforeClose(Cancel As Boolean)
F6 = MsgBox("Bitte ergänzen etc", _
vbOKOnly + vbQuestion, _
"Ausstellerdaten unvollständig")
If F6 = vbOK Then
Cancel = True
[Zelle_fehlender_Eintrag].Select
End If
End Sub
Gruß
stefan
-----Originalnachricht-----
Ein Hallo an alle!
In einer erstellten Vorlage sollen Daten von einem
User
eingetragen werden.
Bevor er das mit seinen Dateneinträgen gefüllte
Workbook
schließt (Dto: speichern, speichern unter) erfolgt
mittels VBA Code vor dem Schließen eine Abfrage, ob er
alle Datenfelder mit Einträgen gefüllt hat. Wenn nicht,
soll der von ihm vorher ausgelöste Excel
Prozess, "Datei
Speichern", "Datei Speichern unter", "Datei Schließen"
(ggf. auch durch Betätigung des oberen rechten "X" =
Excel "Schließen Buttons") abgebrochen werden, um dem
User die Möglichkeit zu geben, die fehlenden Daten in
dem
aktiven Sheet direkt zu ergänzen.
Leider gelingt es mir nicht die ausgelösten o. g. Excel
Prozesse zu stoppen, um auf dem aktiven Sheet, zwecks
Ergänzung der Daten, zu verbleiben. Soll heissen, das
Workbook wird von Excel geschlossen, bzw. es erfolgt
die
Eingabeaufforderung ob das Workbook mit oder ohne
Speicherung geschlossen, oder der Vorgang abgebrochen
werden soll, welche ich unterdrücken möchte.
Der Versuch mittels Application.SendKeys auf die Button
der Eingabeforderung, zum Beispiel auf "Abbrechen"
Einfluss zu nehmen, oder ggf. die Simulation der ESC
Taste um dem Excel Prozess abzubrechen, scheitern in
der
Makro Programm-ausführung.
Die Steuerung der Abfrage erfolgt bei mir mittels Makro
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As
Boolean, Cancel As Boolean)
Hiernach folgen diverse Zellenbereichsabfragen ob die
Dateneinträge vorhanden sind, wenn nicht, dann erfolgt
ein Goto zu der Meldung_2
'-------------------------------------------------------
-
-
-----------
F6 = MsgBox("Bitte ergänzen Sie ihre Ausstellerdaten,
da
diese nicht vollständig
eingetragen sind", vbOKOnly + vbQuestion,
_"Ausstellerdaten unvollständig")
If F6 = vbOK Then
[Zelle_fehlender_Eintrag].select
Application.DisplayAlerts = False
Exit Sub
Dank vorab
wer_pa
.
.
Loading...