Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

[VBA] Excel Task/Instanz beenden

Forumthread: [VBA] Excel Task/Instanz beenden

[VBA] Excel Task/Instanz beenden
30.03.2017 15:59:27
Nils
Hallo zusammen,
Wie kann ich in Excel mit VBA eine Instanz schließen, welche ich nicht selber erstellt habe, sondern welche durch eine Fremdanwendung erstellt wurde?
Ich habe die Situation, dass ich eine Excel-Task-Leiche im Taskmanager habe. Hier gibt es keine Excel-Mappen mehr dazu, und der Weg über Taskmanager starten und dann Excel-Prozess beenden ist sehr benutzerunfreundlich.
Gibt es dort eine Möglichkeit den task zu beenden?
Danke euch!
Anzeige

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

Betreff
Datum
Anwender
Anzeige
Taskmanager ist klar die richtige Wahl
30.03.2017 16:16:46
EtoPHG
Hallo Nils,
Du findest also das ein tief in das laufende System eingreifender VBA-Code sicherer ist, wie der Taskmanager?
Ich nicht.
Wenn du diese Situation vermehrt hast, dann suche nach der Ursache und nicht nach einem unsicheren Tool, dass dir alles zerschissen kann.
Gruess Hansueli
Anzeige
Du solltest besser gegenlesen vorm senden ;-) oT
30.03.2017 16:55:16
Matthias
AW: Du solltest besser gegenlesen vorm senden ;-) oT
30.03.2017 17:17:16
Nils
^_^
AW: Du solltest besser gegenlesen vorm senden ;-) oT
30.03.2017 17:44:02
Hajo_Zi
kannst Du das "^_^" übersetzen. Was ist daran offen?

Anzeige
die Frage ist noch offen Hajo! owT
30.03.2017 17:59:31
Matthias
AW: Taskmanager ist klar die richtige Wahl
30.03.2017 17:09:33
Nils
Hallo Hansueli,
danke erst einmal für Deine Antwort. Natürlich hast du recht. Im Grunde ist es auch nur ein Workaround. Das eigentliche Problem ist, dass die LabView-Anwendung, welche die Instanz initialisiert hat, selbige nicht beenden kann.
Sobald das rote "x" der Excel-Instanz oben rechts vom jeweiligen Benutzer gedrückt wird, verschwindet die leere Excel-Instanz in den nicht-sichtbar-Modus. Der Nutzer denkt, der Prozess ist beendet, ist aber nicht so. Im Taskmanager steht er nachwievor. Leider kann man offensichtlich LabView nicht dazu bringen die Instanz anschließend zu beenden, was sehr ärgerlich ist. Das programmatische Beenden von Excel und terminieren der Instanz bleibt wirkungslos.
Meine Idee ist, dass man in Excel per VBA vor schließen der Mappe prüft, wieviele Mappen in der Instanz geladen sind (count). Ist das Ergebnis "1", also nur noch diese eine Mappe vorhanden, welche man gerade schließen möchte, dann soll doch auch bitte anschließend der dazugehörige Prozess beendet werden (was ja eigentlich automatisch passiert, nur eben nicht wenn ein Fremdprogramm die Instanz initialisiert hat, warum auch immer das so ist...).
Sowas in der Art stelle ich mir vor. Ansonsten soll eine batch mit "TASKKILL /F /IM excel.exe /T" ausgeführt werden, wenn's mit VBA nicht geht.
Ich denke du sieht meine Verzweiflung.
Danke, auch an jeden weiteren Rat!
Nils
Anzeige
[VBS] Excel Task/Instanz beenden
30.03.2017 17:55:02
Anton
Hallo Nils,
man konnte VB Script dafür benutzen, etwa so:
if msgbox("Willst du alle EXCEL Instanzen schliessen?",vbyesno,"Abfrage")=vbyes then
Set ex = GetObject(,"Excel.Application")
for each wb in ex.workbooks
wb.close true
next
ex.quit
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'excel. _
exe'")
For Each objProcess In colProcessList
objProcess.terminate
Next
end if
mfg Anton
Anzeige
AW: [VBS] Excel Task/Instanz beenden
30.03.2017 18:56:45
Nils
Hmm...
das funktioniert leider nicht. nach "ex.quit" hört der code auf zu arbeiten ;-)
Naja, Ich glaube ich bin auch auf dem Holzweg.
Muss das irgendwie mit LabView lösen, bloß wie?!?! -.-
VBS nicht VBA ! oT
31.03.2017 06:53:40
Anton
Test oT
31.03.2017 15:30:25
Anton
Anzeige
AW: VBS nicht VBA ! oT
03.04.2017 18:40:13
Anton
;
Anzeige
Anzeige

Infobox / Tutorial

Excel Task/Instanz beenden mit VBA


Schritt-für-Schritt-Anleitung

Um eine Excel-Instanz zu beenden, die nicht von Dir erstellt wurde, kannst Du folgenden VBA-Code verwenden:

Sub BeendeExcelInstanz()
    Dim ex As Object
    Set ex = GetObject(, "Excel.Application")

    Dim wb As Workbook
    For Each wb In ex.Workbooks
        wb.Close True
    Next wb

    ex.Quit
    Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
    Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = 'excel.exe'")

    For Each objProcess In colProcessList
        objProcess.Terminate
    Next objProcess
End Sub

Dieser Code fragt zunächst, ob alle Excel-Instanzen geschlossen werden sollen. Wenn Du bestätigst, werden alle geöffneten Arbeitsmappen geschlossen, bevor die Excel-Anwendung beendet wird. Anschließend wird die Instanz über WMI (Windows Management Instrumentation) gekillt.


Häufige Fehler und Lösungen

  1. Fehler: ex.Quit funktioniert nicht.

    • Lösung: Stelle sicher, dass es keine offenen Arbeitsmappen gibt. Wenn ex.Quit aufgerufen wird, ohne dass Arbeitsmappen geschlossen sind, kann dies zu Problemen führen.
  2. Fehler: Excel-Instanz bleibt im Task-Manager sichtbar.

    • Lösung: Überprüfe, ob andere Anwendungen (wie LabView) die Excel-Instanz offen halten. Möglicherweise musst Du die Logik anpassen, um sicherzustellen, dass alle Instanzen tatsächlich geschlossen werden.

Alternative Methoden

Falls VBA nicht die gewünschte Lösung bringt, kannst Du alternativ die Eingabeaufforderung verwenden. Mit dem folgenden Befehl kannst Du alle Excel-Prozesse sofort beenden:

taskkill /f /im excel.exe

Dieser Befehl nutzt taskkill, um alle Excel-Instanzen abzubrechen. Dies ist eine effektive Methode, wenn Du schnell und ohne VBA arbeiten möchtest.


Praktische Beispiele

  1. VBA-Skript zur Überwachung und Beendigung von Excel-Instanzen:

    • Das Skript kann so angepasst werden, dass es vor dem Schließen einer Arbeitsmappe prüft, wie viele Mappen offen sind. Wenn nur eine Mappe vorhanden ist, wird die Instanz automatisch beendet.
  2. Batch-Datei zur Automatisierung:

    • Erstelle eine .bat-Datei mit folgendem Inhalt, um Excel-Instanzen schnell zu schließen:
      @echo off
      taskkill /f /im excel.exe

Tipps für Profis

  • Nutze WMI effektiv, um gezielt Prozesse zu beenden, ohne das gesamte Excel-Programm zu schließen. Dies bietet mehr Kontrolle und verhindert den Verlust von Daten in anderen Excel-Instanzen.
  • Halte Dein VBA-Skript so einfach wie möglich und dokumentiere es, damit Du und andere es später leicht verstehen und anpassen können.
  • Berücksichtige Sicherheitsrisiken, wenn du VBA-Skripte zur Prozessbeendigung verwendest. Teste den Code immer in einer sicheren Umgebung.

FAQ: Häufige Fragen

1. Wie kann ich Excel sofort beenden? Du kannst Excel sofort beenden, indem Du den Befehl taskkill /f /im excel.exe in der Eingabeaufforderung ausführst.

2. Kann ich den Excel-Prozess mit VBA sicher beenden? Ja, Du kannst den Excel-Prozess mit VBA sicher beenden, indem Du sicherstellst, dass alle Arbeitsmappen geschlossen sind, bevor Du ex.Quit aufrufst.

3. Was mache ich, wenn mein VBA-Code nicht funktioniert? Überprüfe den Code auf Fehler und stelle sicher, dass alle Objekte korrekt initialisiert wurden. Verwende Debugging, um den Fehler zu identifizieren.

4. Gibt es eine Möglichkeit, den Task-Manager zu umgehen? Ja, Du kannst die Prozesse direkt über VBA oder die Eingabeaufforderung beenden, ohne den Task-Manager zu verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige