Microsoft Excel

Herbers Excel/VBA-Archiv

Workbook before close | Herbers Excel-Forum


Betrifft: Workbook before close von: Kirsche
Geschrieben am: 22.11.2009 19:11:33

hallo leute,

nachdem ich den ganzen tage recherchiert habe und nicht wirklich weiter gekommen bin, baue ich auf eure hilfe.

ich habe eine datei, welche beim schließen auf die tabelle "Start" zurück springen soll, dann soll in der tabelle "Start" in H65535, C25, C26 der wert gelöscht werden. zum schluß sollen alle anderen tabellen ausgeblendet werden.

leider funzt mein makro nicht, woran könnte das liegen?

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim objWS As Worksheet

  Sheets("Start").Select
    Call SchutzAus_Start
 hier springt der debugger an   Sheets("Start").Range("C25:C26,H65535").Value = ""
    Call SchutzEin_Start
        For Each objWS In ThisWorkbook.Worksheets
           If objWS.Name <> "Start" Then
            objWS.Visible = xlSheetHidden
           End If
        Next
        ThisWorkbook.Save
        ThisWorkbook.Close

diese zeilen habe ich deaktiviert, weil excel sonst abstürzt
'If Workbooks.Count = 1 Then
'    Application.Quit
'Else
'    ThisWorkbook.Close True
'End If
End Sub
https://www.herber.de/bbs/user/66091.xls

gruß dörte

  

Betrifft: AW: Workbook before close von: Kirsche
Geschrieben am: 22.11.2009 19:14:02

ich vergass, das passwort lautet für beide

1



  

Betrifft: AW: Workbook before close von: IngGi
Geschrieben am: 22.11.2009 19:47:24

Hallo Kirsche,

mit

Union(Range("C25:C26"), Range("H65535").ClearContents
sollte es funktionieren.

Gruß Ingolf


  

Betrifft: AW: Workbook before close von: Kirsche
Geschrieben am: 22.11.2009 19:59:09

hallo ingolf,

das klappt super, danke.

kann ich in dieser routine eigentlich nur einen befehl auslösen?

wenn ich excel komplett schließen will, mit nachstehendem code, dann stürzt excel ab und will die mappe wieder herstellen. woran kann das liegen?

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Sheets("Start").Select
  Call SchutzAus_Start
   Union(Range("C25:C26"), Range("H65535")).ClearContents
  Call SchutzEin_Start
  
        ThisWorkbook.Save
     die zeile ist dann deaktiviert   ThisWorkbook.Close

diese zeilen meine ich
If Workbooks.Count = 1 Then
    Application.Quit
Else
    ThisWorkbook.Close True
End If
End Sub

gruß dörte


  

Betrifft: AW: Workbook before close von: fcs
Geschrieben am: 22.11.2009 19:53:53

Hallo Dörte,

du kannst in der Workbook_Close - Prozedur nicht nochmals
ThisWorkbook.Close
ausführen.
Dann kommt es zu einem rekursiven Aufruf der Prozedur, was hier aber keinen Sinn macht und dann beim 2. Durchlauf des Makros zum Fehler führt.

Mit der folgenden Anpassung sollte es funktionieren. Application,Quit funktioniert bei mir auch. Allerdings muss du auf Anzahl Workbooks = 2 prüfen, da normalerweise auch die persönliche Makrarbeitsmappe ausgeblendet gestartet wird - und die zählt mit.

Gruß
Franz

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim objWS As Worksheet

  Sheets("Start").Select
    Call SchutzAus_Start
    Sheets("Start").Range("C25:C26,H65535").Value = ""
    Call SchutzEin_Start
        For Each objWS In ThisWorkbook.Worksheets
           If objWS.Name <> "Start" Then
            objWS.Visible = xlSheetHidden
           End If
        Next
        ThisWorkbook.Save

    If Workbooks.Count = 2 Then
        Application.Quit
    End If
End Sub



  

Betrifft: AW: Workbook before close von: Kirsche
Geschrieben am: 22.11.2009 20:14:45

hallo franz,

ich habe den code so eingefügt und bekomme dann beim schließen diese fehlermeldung:

https://www.herber.de/bbs/user/66094.doc

diese meldung habe ich auch schon den ganzen tag bekommen, mit verschiedenen experimenten im code.

gruß dörte


  

Betrifft: AW: Workbook before close von: fcs
Geschrieben am: 22.11.2009 21:02:39

Hallo Claudia,

diese Fehlermeldung sagt natürlich vieles und eigentlich garnichts.

Ursache ?

Lass zumindest mal das "Application.Quit" weg.

Bei mir funktionierte deine Datei unter Excel 2007 mit meinen Anpassungen einwadfrei ohne Fehlermeldungen. Die Datei wird gespeichert und geschlossen und ggf. Excel auch beendet.

Setze im Workbook-Close Makro einen Haltepunkt. Führe dann die weiteren Schritte mit der F8-Taste aus. Dann siehst du zumindest in welcher Zeile Excel ggf. aussteigt.

Gruß
Franz


  

Betrifft: AW: Workbook before close von: Kirsche
Geschrieben am: 22.11.2009 21:17:43

hallo franz,

ich bin doch aber dörte, grins.

der code funzt nur, wenn nichts geändert wurde. sobald ich ein anderes blatt einblende, kommt diese fehlermeldung. auch bei deinem code. hab ich schon getestet. ich bin heute der tester vom dienst. macht mich schon ganz kirre, dass das nicht klappt, heul.

gruß dörte


  

Betrifft: AW: Workbook before close von: IngGi
Geschrieben am: 22.11.2009 21:26:13

Hallo Dörte,

eine Idee hätte ich noch. Möglicherweise stört sich Excel daran, dass in einer aktiven Close-Prozedur ein Application.Quit aufgerufen wird. Vielleicht lässt sich das dann durch ein vorgeschaltetes Cancel=True beheben:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim objWS As Worksheet

Sheets("Start").Select
Call SchutzAus_Start
Union(Range("C25:C26"), Range("H65535")).ClearContents
Call SchutzEin_Start

For Each objWS In ThisWorkbook.Worksheets
   If objWS.Name <> "Start" Then
       objWS.Visible = xlSheetHidden
   End If
Next
ThisWorkbook.Save

If Workbooks.Count = 2 Then
    Cancel = True
    Application.Quit
End If

End Sub
Code eingefügt mit VBA in HTML 2.0.0.3

@Franz:
Die Zeile
Sheets("Start").Range("C25:C26,H65535").Value = ""
interpretiert Excel bei mir als C25:H65535 (Excel2010 beta). Funktioniert das bei dir tatsächlich wie gewünscht, also C25:C26 und H65535?

Gruß Ingolf


  

Betrifft: AW: Workbook before close von: Kirsche
Geschrieben am: 22.11.2009 21:58:13

hallo ingolf,

sorry,das funzt auch nicht.
sobald ich eine eingabe getätigt habe, kommt es beim schließen zum absturz.

bin schon am verzweifeln hier.

die besagte zeile funktioniert unter excel2003 noch ohne union.

gruß dörte


  

Betrifft: AW: Workbook before close von: Kirsche
Geschrieben am: 22.11.2009 22:07:37

sorry, vergass die frage als offen zu kennzeichnen

gruß dörte


  

Betrifft: AW: Workbook before close von: Uwe Küstner
Geschrieben am: 23.11.2009 01:32:31

Hallo dörte,

hier mein Vorschlag, der bei mir mit E2000 funktioniert:

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

  Sheets("Start").Select
  Call SchutzAus_Start
  Sheets("Start").Range("C25:C26,H65535").Value = ""
  Call SchutzEin_Start
  For Each objWS In Me.Worksheets
     If objWS.Name <> "Start" Then
      objWS.Visible = xlSheetHidden
     End If
  Next
  Me.Save
  bolQuit = True
  For Each objWB In Application.Workbooks
    If objWB.Name <> Me.Name Then
      If objWB.Windows(1).Visible = True Then
        bolQuit = False
        Exit For
      End If
    End If
  Next objWB
  If bolQuit = True Then Application.Quit
End Sub
Excel wird nur geschlossen, wenn keine weiteren sichtbaren Dateien offen sind!

Gruß Uwe


  

Betrifft: AW: Workbook before close von: kirsche
Geschrieben am: 23.11.2009 09:15:17

hallo uwe,

hab dein makro auch getestet. wenn ich was in den tabellen ändere und dann schließe, stürzt excel dabei auch ab.

ich denke, meine datei ist vermurkst. ich werd das heute abend mal mit ner neuen datei testen.
danke für deinen vorschlag.

gruß dörte


Beiträge aus den Excel-Beispielen zum Thema "Workbook before close"