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-Key: 260220

Url: https://administrator.de/contentid/260220

Printed on: April 20, 2024 at 13:04 o'clock

Member: colinardo
Solution colinardo Jan 17, 2015, updated at Jan 19, 2015 at 18:48:30 (UTC)
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
Member: ritzmann
ritzmann Jan 19, 2015, updated at Aug 29, 2015 at 21:53:42 (UTC)
Goto Top
Hallo Uwe

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

Gruss
Markus