Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1056to1060
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wieso muss ich Excel zweimal beenden?

Wieso muss ich Excel zweimal beenden?
05.03.2009 23:15:41
wulfguard
Guten Abend,
ich habe folgendes Problem, nach dem ich meinen Code ein wenig optimiert!?!(zumindest ist der Laufzeitfehler raus ;) )
habe ich folgenden Effekt, wenn ich Excel beenden will, wird nur mein Workbook beendet und nach dem das geschlossen ist muss ich Excel nochmal beenden.
Wenn ich nun in Workbook_BeforeClose(Cancel As Boolean) den Befehl Workbooks(ThisWorkbook.Name).Close
lösche kann ich Excel ganz normal schlissen, nur dann bekomme ich Probleme, wenn ich mehrere Excel Sheets geöffnet habe.
Je nach dem auf welchen Sheet der Fokus liegt kommt es zum Laufzeitfehler oder Excel verabschiedet sich ganz mit kritischen Ausnahme Fehler (jedes 5 oder 6 mal).
Weiß jemand wo das Problem liegt?
hier nun der Code
Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () _
As Long
Private Declare Function CloseClipboard Lib "user32" () _
As Long

Private Sub Workbook_Open()
Windows(ThisWorkbook.Name).Activate
Sheets("Konfiguration").Select
Cells(100, 3) = " " & ActiveWorkbook.BuiltinDocumentProperties(11).Value
Cells(101, 3) = " " & ActiveWorkbook.BuiltinDocumentProperties(12).Value
Cells(102, 3) = " " & ActiveWorkbook.BuiltinDocumentProperties(7).Value
End Sub



Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Windows(ThisWorkbook.Name).Activate
Call MK1
Call MK2
Call MK3
If OpenClipboard(0&)  0 Then
Call EmptyClipboard
Call CloseClipboard
End If
End Sub



Private Sub Workbook_BeforeClose(Cancel As Boolean)
Windows(ThisWorkbook.Name).Activate
Call MK1
Call MK2
Call MK3
If OpenClipboard(0&)  0 Then
Call EmptyClipboard
Call CloseClipboard
Workbooks(ThisWorkbook.Name).Close
End If
End Sub


Bem.: MK1 -3 Sind Makros, welche ich mit dem Makrorecorder aufgezeichnet habe um bestimmte Formatierungen auf dem 3 Arbeitsblättern zurück zu kopieren.
Sub MK1()
'
' MK1 Makro
' Makro am 22.02.2009 von Wulfguard aufgezeichnet
'
'
Sheets("Konfiguration").Select
Range("A1:K103").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Formatierung").Select
Range("A1:K103").Select
Selection.PasteSpecial Paste:=xlPasteAllExceptBorders, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1:K103").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Konfiguration").Select
Range("A1:K103").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End Sub


4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wieso muss ich Excel zweimal beenden?
05.03.2009 23:24:00
Tino
Hallo,
versuche es mal so.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Windows(ThisWorkbook.Name).Activate
Call MK1
Call MK2
Call MK3
If OpenClipboard(0&)  0 Then
Call EmptyClipboard
Call CloseClipboard
If Workbooks.Count = 1 Then
Application.Quit
Else
ThisWorkbook.Close
End If
End If
End Sub


Gruß Tino

AW: Wieso muss ich Excel zweimal beenden?
06.03.2009 00:25:15
wulfguard
Hi Tino erstmal danke für deine Antwort
So ich hab es gerade ausprobiert und folgendes verhalten festgestellt.
1.
2 Sheets geöffnet Sheet A mit dem neuen Code Sheet B mit irgend einer Dummytabelle - Funzt
2.
2 Sheets geöffnet Sheet A und B mit dem neuen Code - Funzt nicht gleiches Verhalten, ich muss bei Excel 2 mal auf beenden drücken. Leider ist Fall 2 der normal Fall ,da ich die Sheets zum dokumentieren von PC und Netzwerk Einstellunugen nutze und ich öfters mehrere (3-4) geöffnet habe.
Anzeige
AW: Wieso muss ich Excel zweimal beenden?
06.03.2009 00:49:51
Tino
Hallo,
jetzt ist es mir noch mal eingefallen, was dieses verhalten auslöst.
Excel wird nicht richtig beendet,
wenn dass schließen Event ausgeführt wird und nicht beendet werden kann.
Wie z. Bsp. in diesem Fall durch.

If Workbooks.Count = 1 Then
Application.Quit
Else
ThisWorkbook.Close
End If


Ist nicht nötig, weil dass schließen ja schon ausgelöst wurden.
Am ende von BeforeClos wird Excel sowieso beendet,
wenn es über Cancel nicht abgebrochen wird.
Eventuell müsstest Du dies auch in anderen Dateien prüfen die zurzeit geöffnet sind.


Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Activate
Call MK1
Call MK2
Call MK3
If OpenClipboard(0&)  0 Then
Call EmptyClipboard
Call CloseClipboard
End If
End Sub


Ich gehe jetzt schlafen, viel spaß beim testen. ;-)
Gruß Tino

Anzeige
AW: Wieso muss ich Excel zweimal beenden?
06.03.2009 08:10:55
Tino
Hallo,
um es mal besser zu verdeutlichen, mach mal so.
Nimm eine neue Datei und erstelle in dieser, dieses Eventmakros.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ThisWorkbook.Close True
End Sub


Jetzt passiert folgendes, beim speichern wird BeforeSave ausgelöst,
in diesem Makro ist nun der Close befehl eingebaut,
nun wird die Datei geschlossen aber BeforeSave nicht beendet.
Die Datei wird geschlossen aber die Instanz bleibt bestehen,
weil diese Makro nicht beendet wurde.
Dummes Beispiel, ein besseres ist mir nicht eingefallen.
Also muss ich den Code etwas umbauen damit Excel richtig beendet wird.


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = True
If Workbooks.Count > 1 Then
ThisWorkbook.Close False
Else
Application.Quit
End If
End Sub


Also muss ich darauf achten, dass bevor ich schließe alle Makros abgearbeitet sind
oder den Umweg über Application.Quit machen.
Gruß Tino

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige