Microsoft Excel

Herbers Excel/VBA-Archiv

Workbook_BeforeClose

Betrifft: Workbook_BeforeClose von: Ludwig
Geschrieben am: 27.08.2014 08:12:05

Hallo Experten

Ichgebe auf, brauche Hilfe! Möchte beim Verlassen des workbooks eine schöne Meldung zeigen. Funktioniert auch solange kein weiteres workbook offen ist. sobald eins offen ist stürzt Excel ab und alles ist dahin! Hat jemand einen guten Rat wo der Fehler liegt?

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim TB1 As Worksheet
Dim objWB As Workbook
Dim bolQuit As Boolean

Set TB1 = Worksheets("H-MENÜ")
TB1.Visible = xlSheetVisible
TB1.Activate
ActiveWorkbook.Close False

        Dim WsShell                     ' Variable für Copyright
        Dim LoI As Long
        Set WsShell = CreateObject("WScript.Shell")
        LoI = WsShell.Popup("   ...und Tschüss sagt: " _
            & "" & vbCrLf & vbCrLf & "            schöne Meldung! " _
            & "" & vbCrLf _
            & "" & vbCrLf & vbCrLf & vbCrLf _
            & Chr(169) & " 2010", 1, "Copyright-Hinweis")

'Unload Me

 bolQuit = True
  For Each objWB In Application.Workbooks
    If objWB.Name <> Me.Name Then
      'If objWB.Windows(1).Visible = True Then
        objWB.Windows(1).Activate
        bolQuit = False
        Exit For
      'End If
    End If
  Next objWB
  If bolQuit = True Then Application.Quit

End Sub
Vielen Dank im Voraus.

  

Betrifft: AW: Workbook_BeforeClose von: Daniel
Geschrieben am: 27.08.2014 09:14:15

Hi

Du darfst im beforeclose-event selbst die Datei nicht schliessen.
Das passiert automatisch nach Ablauf dieses Makros.
Gruß Daniel


  

Betrifft: AW: Workbook_BeforeClose von: Ludwig
Geschrieben am: 27.08.2014 09:57:37

Hi Daniel

Es liegt eindeutig an dem Part

Dim WsShell ' Variable für Copyright
Dim LoI As Long
Set WsShell = CreateObject("WScript.Shell")
LoI = WsShell.Popup(" ...und Tschüss sagt: " _
& "" & vbCrLf & vbCrLf & " schöne Meldung! " _
& "" & vbCrLf _
& "" & vbCrLf & vbCrLf & vbCrLf _
& Chr(169) & " 2010", 1, "Copyright-Hinweis")

Den Rest habe ich rausgeschmissen; ohne Erfolg!

Gruß Ludwig


  

Betrifft: AW: Workbook_BeforeClose von: fcs
Geschrieben am: 27.08.2014 09:47:34

Hallo Ludwig,

die absolute Problemzeile ist hier:
ActiveWorkbook.Close False

Diese Zeile gehört nicht in ein Workbook_BeforeClose-Ereignismakro.
Denn meistens (außer bei makro-gesteuertem Schließen von Dateien) ist die Datei in der Workbook_BeforeClose ausgeführt wird auch die aktive Arbeitsmappe. Somit kommt es zu wiederholtem Start des Ereignismakros bis zum Excel-Crash.

Du willst in der Datei ein bestimmtes Blatt sichtbar machen, bevor die Datei geschlossen wird. Dann musst du natürlich die Datei auch speichern bevor sie geschlossen wird, wenn du die Sicherheitsabfrage von Excel vermeiden willst.

Ich würde das Makro wie folgt gestalten.

Gruß
Franz

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim TB1 As Worksheet
    Dim objWB As Workbook
    Dim bolQuit As Boolean
    Dim WsShell                     ' Variable für Copyright
    Dim LoI As Long
    
    Set TB1 = Me.Worksheets("H-MENÜ")
    TB1.Visible = xlSheetVisible
    TB1.Activate
    If Me.Saved = False Then Me.Save
    
    bolQuit = True
    For Each objWB In Application.Workbooks
      Select Case objWB.Name
        Case Me.Name
          'do nothing
        Case Else
          If objWB.Windows(1).Visible = True Then
            objWB.Windows(1).Activate      'ist eigentlich überflüssig
            bolQuit = False
            Exit For
          Else
            'nicht sichtbare Arbeitsmappen ggf. speichern
            If objWB.Saved = False Then
              objWB.Save
            End If
          End If
      End Select
    Next objWB
    
    
    Set WsShell = CreateObject("WScript.Shell")
    LoI = WsShell.Popup("   ...und Tschüss sagt: " _
              & "" & vbCrLf & vbCrLf & "            schöne Meldung! " _
              & "" & vbCrLf _
              & "" & vbCrLf & vbCrLf & vbCrLf _
              & Chr(169) & " 2010", 1, "Copyright-Hinweis")
    
    'Excel ggf. beenden
    If bolQuit = True Then Application.Quit
    

End Sub



  

Betrifft: AW: Workbook_BeforeClose von: Ludwig
Geschrieben am: 27.08.2014 10:02:16

Hallo Franz

Danke für deine Antwort. Aber ich möchte die Datei eben nicht speichern - aber nach der Meldung schließen!

Gruß Ludwig


  

Betrifft: AW: Workbook_BeforeClose von: fcs
Geschrieben am: 27.08.2014 10:22:52

Hallo Ludwig,

dann kannst du dir das aktivieren des Blatts "H-MENÜ" eigentlich sparen

und ersetze in meinem Code die Zeile

    If Me.Saved = False Then Me.Save

durch
    Me.Saved = True
Gruß
Franz


  

Betrifft: AW: Workbook_BeforeClose von: Ludwig
Geschrieben am: 27.08.2014 11:03:16

Hallo Franz

Bingo - das wars!
Danke!

Gruß Ludwig