Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1072to1076
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
Excel per VBA beenden
08.05.2009 16:55:36
Martin
Hallo Forum,
ich habe ein Macro, das von der Workbook_Open aufgerufen wird. Ich löse ein Problem mit dem SOLVER und will die Datei schliessen und Excel beenden.
Das Schliessen funktioniert,
wenn das Makro bei geöffneter Datei von Hand gestartet wird
wenn Excel gestartet ist und die Datei per Doppelklick gestartet wird
Das Schliessen funktioniert NICHT,
wenn die Datei per Doppelklick gestartet wird und selber Excel öffnet (so muss es leider funktionieren)
Ich speichere alle Daten, schliesse alle Workbooks bis auf das, in dem das Makro steht, setze alle mir bekannten Objekte auf nothing. Das Makro läuft einfach drüber, wie als ob nichts wäre. Err.Number ergibt 0.

Private Sub Workbook_Open()
Call JobExec.RunJob
End Sub


Modul JobExec:
Option Explizit
Sub RunJob
...
Solver.Auto_open ' notwendig, damit SolverOptions keine Fehlermeldung im Batch-Run erzeugt
...
Application.DisplayAlerts = False
' Bewusst kein workbook.close vorher
Application.Quit
End Sub


Hinweise im Netz auf noch offene Objekte konnte ich nicht richtig umsetzen. Application.UsedObjects gibt 58 zurück, aber Versuche mit unload oder set = nothing in einer for each-Schleife haben nicht funktioniert. Oder gibt es einen Befehl mit dem man Excel einfach zuverlässig abschiesst?
Dankbar für jeden Tipp,
Martin

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel per VBA beenden
08.05.2009 18:17:56
Martin
Nachtrag:
Ein kurzer Vergleich mit alten Versionen zeigte, dass das Problem mit den einfachen Berechnungen nicht auftritt. Es tritt anscheinend erst auf seit ich auch den Solver in VBA verwende.
Excel sicher beenden: Leider noch nicht gelöst
09.05.2009 09:50:52
Martin
Hat jemand eine Idee?
AW: Excel sicher beenden: Leider noch nicht gelöst
09.05.2009 10:15:42
Tino
Hallo,
oft wird Excel nicht richtig beendet, wenn dass schließen mehrmals im Code aufgerufen wird.
Was weis ich z. Bsp. wird Close in einem Makro verwendet und in irgendeinem Eventmakro nochmal,
dies in Verbindung mit dem Close Ereignis, dann wird die Applikation nicht richtig beendet.
Mehr kann ich Dir dazu auch nicht sagen.
Gruß Tino
vielleicht gehts ja
09.05.2009 12:26:33
Tino
Hallo,
ich weis jetzt nicht ob dies Dein Problem lösen kann, versuchen kann man es ja mal.
kommt als Code in DieseArbeitsmappe
Option Explicit 
 
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
Dim iMsg As Integer 
Dim mySaved As Boolean 
 
 
If Not Me.Saved Then 
 iMsg = MsgBox("Sollen Ihre Änderungen an '" & Me.Name & "' gespeichert werden?", vbYesNoCancel) 
    Select Case iMsg 
     Case vbYes: Me.Save: mySaved = True 
     Case vbNo: mySaved = True 
     Case vbCancel: Cancel = True: Exit Sub 
    End Select 
Else 
    mySaved = True 
End If 
 
    If mySaved Then 
        If Workbooks.Count = 1 Then 
         Application.Quit 
        Else 
         ThisWorkbook.Close False 
        End If 
    End If 
 
End Sub 
 


Gruß Tino

Anzeige
AW@all: Problem anscheinend gelöst
09.05.2009 16:01:48
Martin
Hallo Tino, Gerd, Rainer,
habe eine Brachial-Lösung gefunden, so dass es jetzt bei mir funktioniert (Dank API-Guide von www.allapi.net)

' API-Functions to securely quit Excel-Instance
Private Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode  _
As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Sub ExcelSuicide()
' Securely quits Excel-Instance which calls this sub
ExitProcess GetExitCodeProcess(GetCurrentProcess, 0)
End Sub
Sub Main()
' and quit excel
Application.Quit
' In case standard quit fails, use API-Functions to kill this Excel-instance
Call ExcelSuicide
' In case, quitting fails, close workbook at least
ActiveWorkbook.Close (False)
end sub


Vielleicht hilft es ja auch anderen, da das Problem anscheinend nicht so selten ist.
Danke für's Mitdenken,
bis bald,
Martin

Anzeige
aber mit Application.Quit...
09.05.2009 16:24:20
Tino
Hallo,
..., tust Du auch andere Excel Dateien in dieser Instanz beenden die Du eventuell gar nicht beenden möchtest und sind diese nicht gespeichert, geht auch noch Deine Änderung in dieser oder diesen Dateien verloren.
Oder sehe ich dies falsch?
Gruß Tino
AW: Excel per VBA beenden
09.05.2009 10:37:43
Gerd
Hallo Martin!
Mal die DisplayAlerts beim Testen drin lassen?
Gruß Gerd
AW: Excel per VBA beenden
09.05.2009 11:55:27
Martin
Hallo Gerd,
DisplayAlerts direkt vor dem Aufruf von Application.quit hat leider keinerlei Meldung gebracht.
Trotzdem danke,
Martin
AW: Excel per VBA beenden
09.05.2009 11:33:41
Raist10
Es ist ein kleines Phänomen, manche Sachen gerade in Bezug auf Open und Close funtkionieren nicht richtig wenn sie aus einem Workbook-Ereignis wie eben Open und Close heraus aufgerufen werden.
Hatte ich auch schon mehrfach das Problem und es gibt meines Wissens nach keine wirkliche Lösung, als einen recht umständliche Weg zu nehmen. Ich habe es wie folgt gelöst (was allerdings in meinem Fall dann einfacher, da ich eh eine User-Navigation eingebaut hatte):
Habe in den Ereignissen Close und Save in der Klasse DieseArbeitsmappe, schlicht und ergreifend eingebaut das Schliessen/Speichern aus dem normalen Excel Menu mit Cancel = True quittiert werden. Dafür habe ich ein Flag in einem versteckten Sheet gesetzt (geht aber auch über eine öffentliche Variabele). Dieses Flag wird nur auf True gesetzt wenn der User die im Sheet eingebauten Speichern oder Schliessen-Button drückt und somit werden die Ereignisse nur dann mti Cancel = False bestätigt.
Da der User nun den im sheet eingebauten Button nutzen muss, kann ich hier Prozeduren aufrufen BEVOR ich dann endgültig das Kommando Save oder Close geben lasse. Damit erfolgt die Abbarbeitung der nötigen Prozeduren eben aus einer Sub/Function heraus und nicht aus den Ereignisse Close/Save ... und dann klappt es auch perfekt.
Wie gesagt, umständlich ist aber meines Wissens nach die einzige Möglichkeit um diesen Excel-Bug zu umgehen, wenn es denn wirklich nötig ist.
Versuche es erst gar nicht mit tief ineinander geschachtelten Aufrufen von Sub's, das Problem kannst du tatsächlich nur lösen wenn Du die Anweisungen AUSSERHALB der Ereignisse BeforeSave/BeforeClose ausführen lässt.
Gruß
Rainer
Anzeige
AW: Excel per VBA beenden
09.05.2009 12:11:59
Gerd
Hallo Martin!
Mit Lösungsvorschlägen eines Amateurs an einen Doppel-Profi ist das so eine Sache.
Trotzdem: Evtl. fehlt nur ein Sleep vor Application.Quit, weil noch nicht alle Berechnungen
abgeschlossen sind ?
Gruß Gerd
AW: Excel per VBA beenden
09.05.2009 15:50:06
Martin
Hallo Gerd,
alles schon probiert. Danke für's Mitdenken.
Habe Brachial-Lösung gefunden, hänge ich hinter Tinos Beitrag.
Bis bald,
Martin

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige