Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Systembefehle aus Excel VBA heraus aufrufen | Herbers Excel-Forum


Betrifft: Systembefehle aus Excel VBA heraus aufrufen von: Stefan
Geschrieben am: 14.08.2012 09:56:49

Hallo zusammen,

nach einigen Jahren Excel-VBA Abstinenz möchte ich mich wieder ein wenig intensiver mit Excel und VBA auseinandersetzen, insbesondere auch deshalb da unser Managment gerne Office-Lösungen anstelle von lediglich Kommandozeilen basierten Ausgaben bevorzugt.

Ich möchte in Excel eine Art Monitoring für unsere Client-PCs erstellen. Viele Aufgaben lassen sich hier direkt mit Excel und VBA-Makros umsetzen. Problematisch wird es aber immer wenn man auf Systembefehle, wie etwa auf einen ping oder auch Sysinternals-Programme wie

psinfo | find "time"
zugreifen muss. Mein Ansatz bisher war, dass ich ein Script gestartet habe, welches etwa eine in Excel "produzierte" Liste (ASCII-Textdatei) abarbeitet und dann eine Ergebnisliste erstellte mit eben den geprüften Informationen (z. B. ping ok, oder eben die Uptime). Diese habe ich dann in Excel wieder eingelesen und die Ergebnisse dann dargestellt. Allerdings musste ich auf der Excelseite immer eine Wartezeit einbauen, die natürlich aufgrund der variierenden Zeitdauer auf das Maximum der Zeit ausgelegt sein musste.

Hat jemand hier Erfahrungen bzw. andere Ansätze? Ach ja, es muss auf alle Fälle mit Clientrechten laufen!

Gruß und schon mal vielen Dank für Eure Beiträge

Stefan

  

Betrifft: AW: Systembefehle aus Excel VBA heraus aufrufen von: MatthiasG
Geschrieben am: 14.08.2012 10:38:36

Hallo Stefan,

ich habe dies in meinem "Privatarchiv" gefunden (hab ich selbst aus dem Netz):

Option Explicit

Private Declare Function CloseHandle Lib "kernel32" _
 (ByVal hObject As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" _
 (ByVal hProcess As Long, ExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" _
 (ByVal DesiredAccess As Long, ByVal InheritHandle As Long, _
 ByVal ProcessId As Long) As Long

Public Function ShellWait(Exec As String, _
 Optional WindowStyle As VbAppWinStyle = vbMinimizedFocus) _
 As Long

  Dim nTaskId As Long
  Dim nHProcess As Long
  Dim nExitCode As Long
  
  Const STILL_ACTIVE = &H103
  Const PROCESS_QUERY_INFORMATION = &H400
    
  nTaskId = Shell(Exec, WindowStyle)
  nHProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, nTaskId)
  Do
    DoEvents
    GetExitCodeProcess nHProcess, nExitCode
  Loop While nExitCode = STILL_ACTIVE
  CloseHandle nHProcess
  ShellWait = nExitCode
End Function

Sub test()
MsgBox ShellWait("ping herber.de", vbNormalFocus)
End Sub

Gruß Matthias


  

Betrifft: AW: Systembefehle aus Excel VBA heraus aufrufen von: Stefan
Geschrieben am: 14.08.2012 11:48:57

Hi Matthias,

wirklich super! Habe eben mal die Anzahl der pings auf 1 reduziert und da ist das wirklich super schnell!

Gruß und Danke

Stefan


Beiträge aus den Excel-Beispielen zum Thema "Systembefehle aus Excel VBA heraus aufrufen"