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: [ 973 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Samstag, 23. Juli 2011