ritzmann
Goto Top

Prozess Beenden mit VBA (Excel)

Hallo zusammen

Drehe momentan am Rad, da ich nicht mehr weiter weiss. Erhoffe mir durch euch eine Lösung zu finden.

Mit folgendem Code kann ich erfolgreich "calc.exe" beenden:

Private Sub cmdTaskBeenden_Click()
 
Set objWindowsService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set ProcessList = objWindowsService.ExecQuery _
 ("SELECT * FROM Win32_Process WHERE Name = 'calc.exe'")
For Each objProcess In ProcessList
 objProcess.Terminate 'Prozess beenden
Next objProcess
End Sub

Nun soll aber nicht "calc.exe" beendet werden, sondern der jeweilige Prozess der in der Variable steht.

Nachfolgend der Code:

Private Sub cmdTaskBeenden_Click()
 
AusgewaehlterProzess = ListBox1.Value
 
Set objWindowsService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set ProcessList = objWindowsService.ExecQuery _
 ("SELECT * FROM Win32_Process WHERE Name = 'AusgewaehlterProzess'")
For Each objProcess In ProcessList
 objProcess.Terminate 'Prozess beenden
Next objProcess
End Sub

Leider funktioniert das nicht. face-sad
An der Variable kann es irgendwie nicht liegen da "MsgBox AusgewaehlterProzess" den Namen vom Prozess ausgibt.

Ob hier jemand eine Lösung weiss?

Gruss
Markus

Content-ID: 260220

Url: https://administrator.de/forum/prozess-beenden-mit-vba-excel-260220.html

Ausgedruckt am: 23.12.2024 um 06:12 Uhr

colinardo
Lösung colinardo 17.01.2015, aktualisiert am 19.01.2015 um 19:48:30 Uhr
Goto Top
Hallo Markus,
du hast die Variable nicht korrekt in die WQL Query eingebaut. Bei deiner Version wird der Variablenname als String selbst interpretiert und nicht der Inhalt der Variablen eingesetzt. Um das zu erreichen musst du das Konstrukt so schreiben (nur Zeile 4 wurde angepasst).
Private Sub cmdTaskBeenden_Click()
    AusgewaehlterProzess = ListBox1.Value
    Set objWindowsService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")  
    Set ProcessList = objWindowsService.ExecQuery("SELECT * FROM Win32_Process WHERE Name = '" & AusgewaehlterProzess & "'")  
    For Each objProcess In ProcessList
         objProcess.Terminate 'Prozess beenden  
    Next objProcess
End Sub
Grüße Uwe
ritzmann
ritzmann 19.01.2015, aktualisiert am 29.08.2015 um 23:53:42 Uhr
Goto Top
Hallo Uwe

Vielen herzlichen Dank, funktioniert mit deinem Code super.
Hab wohl wieder was dazu gelernt!

Gruss
Markus