|
Tipp 0317
|
BeforeClose-Ereignis
|
|
|
Autor/Einsender: Datum: |
|
Angie 22.02.2003 |
|
Entwicklungsumgebung: |
|
Excel 97 |
|
|
Das BeforeClose- (Workbook-Objekt) bzw. WorkbookBeforeClose-Ereignis
(Application-Objekt) tritt ein, bevor die Arbeitsmappe geschlossen wird. Wurden in der Arbeitsmappe
Änderungen gemacht, tritt dieses Ereignis bereits ein, bevor der Benutzer gefragt wird, ob die Änderungen
gespeichert werden sollen, und damit kann es schon zu "Problemen" kommen.
|
Ein Beispiel aus der Praxis:
|
Gehen wir mal davon aus, dass Sie beim Öffnen der Arbeitsmappe bestimmte Benutzer-Einstellungen
verändert haben, wie z. B. das Ausblenden von Symbolleisten. Werden in der Arbeitsmappe Änderungen
vorgenommen und nicht gespeichert, und das BeforeClose-Ereignis würde z. B. so aussehen...
|
|
|
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Prozedur zum Einblenden der Symbolleisten
End Sub
|
|
|
... dann würden die Symbolleisten wieder eingeblendet werden, auch wenn der Benutzer den Vorgang
den Speicherns und damit das Schließen der Arbeitsmappe abbricht. Dies kann passieren, wenn der
Benutzer bei der Abfrage, ob er speichern will oder nicht, den Button Abbrechen klickt, oder aber
auch, wenn die Arbeitsmappe noch nie gespeichert wurde, bei Klick auf den Button Ja und dann im
daraufhin erscheinendem Speichern-Dialog auf den Button Abbrechen. Die Arbeitsmappe würde also in
beiden beschriebenen Fällen offen bleiben, und die Symbolleisten, die an sich ausgeblendet sein
sollten, sind bereits wieder eingeblendet, was ja eigentlich nicht Sinn und Zweck des
Programmierers war.
|
Wie dieser Tipp zeigt, lässt sich oben beschriebene "Problematik" durchaus lösen. Soll eine bestimmte
Prozedur nur dann ausgeführt werden, wenn die Arbeitsmappe tatsächlich geschlossen wird, muss das
Schließen und das evtl. notwendige Speichern der Arbeitsmappe im BeforeClose-Ereignis
nachgebildet werden.
|
|
|
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim lngRetVal As Long
Dim blnDialog As Boolean
Cancel = True
If ThisWorkbook.Saved = False Then
lngRetVal = MsgBox("Sollen Ihre Änderungen in '" & _
ThisWorkbook.Name & "' gespeichert werden ?", _
vbYesNoCancel + vbQuestion, _
Title:="Demo Workbook_BeforeClose-Ereignis")
Select Case lngRetVal
Case vbYes
If Len(ThisWorkbook.Path) <> 0 Then
TueIrgendEtwas
ThisWorkbook.Save
Cancel = False
Else
blnDialog = Application.Dialogs(xlDialogSaveAs).Show
If blnDialog <> False Then
TueIrgendEtwas
Cancel = False
End If
End If
Case vbNo
TueIrgendEtwas
ThisWorkbook.Saved = True
Cancel = False
'Case vbCancel
End Select
Else
TueIrgendEtwas
Cancel = False
End If
End Sub
Private Sub TueIrgendEtwas()
MsgBox "Tue irgend etwas ;-)"
End Sub
|
|
|
Windows-Version |
95 |
|
|
98/SE |
|
|
ME |
|
|
NT |
|
|
2000 |
|
|
XP |
|
|
Vista |
|
|
Win
7 |
|
|
|
Excel-Version |
95 |
|
|
97 |
|
|
2000 |
|
|
2002
(XP) |
|
|
2003 |
|
|
2007 |
|
|
2010 |
|
|
|
|
Download (11,2 kB)
|
Downloads bisher: [ 1059 ]
|
|
|