Excel VBA - Clients anpingen und Ausgabe in Datei über Variable
Hallo,
ich befasse mich seit kurzem mit VB und stehe vor einer Herausforderung .
Ich versuche über excel-VB mehrere Clients anzupingen um den Online-Status in einer Spalte über mehrere Zeilen anzeigen zu lassen.
Das funktioniert soweit ganz gut. Nun habe ich aber mehrere Rechner und muss derzeit für jeden Rechner die Prozedur incl. Rechnernamen eintragen.
So sieht das bisher aus:
Hier der Code:
Sub PingClients()
Dim objExcel, objWorkbook, objWorksheet, astrComputer
'Computer eintragen
astrComputer = Array("Client1")
'Excel instanzieren
Set objWorksheet = Application.ActiveSheet
For i = 0 To UBound(astrComputer)
Set objPing = GetObject("winmgmts:").Get("Win32_PingStatus.Address='" & _
astrComputer(i) & "'")
If objPing.StatusCode = 0 Then
objWorksheet.Cells(i + 5, 3).Interior.ColorIndex = 4
Else
objWorksheet.Cells(i + 5, 3).Interior.ColorIndex = 3
End If
Next
'Computer eintragen
astrComputer = Array("Client2")
'Excel instanzieren
Set objWorksheet = Application.ActiveSheet
For i = 0 To UBound(astrComputer)
Set objPing = GetObject("winmgmts:").Get("Win32_PingStatus.Address='" & _
astrComputer(i) & "'")
If objPing.StatusCode = 0 Then
objWorksheet.Cells(i + 6, 3).Interior.ColorIndex = 4
Else
objWorksheet.Cells(i + 6, 3).Interior.ColorIndex = 3
End If
Next
End Sub
Bei vielen Rechnern ist das natürlich sehr aufwendig. Geht das auch über eine Variable?
Habt Ihr evtl. einen Lösungsvorschlag für mich?
Danke!
ich befasse mich seit kurzem mit VB und stehe vor einer Herausforderung .
Ich versuche über excel-VB mehrere Clients anzupingen um den Online-Status in einer Spalte über mehrere Zeilen anzeigen zu lassen.
Das funktioniert soweit ganz gut. Nun habe ich aber mehrere Rechner und muss derzeit für jeden Rechner die Prozedur incl. Rechnernamen eintragen.
So sieht das bisher aus:
Hier der Code:
Sub PingClients()
Dim objExcel, objWorkbook, objWorksheet, astrComputer
'Computer eintragen
astrComputer = Array("Client1")
'Excel instanzieren
Set objWorksheet = Application.ActiveSheet
For i = 0 To UBound(astrComputer)
Set objPing = GetObject("winmgmts:").Get("Win32_PingStatus.Address='" & _
astrComputer(i) & "'")
If objPing.StatusCode = 0 Then
objWorksheet.Cells(i + 5, 3).Interior.ColorIndex = 4
Else
objWorksheet.Cells(i + 5, 3).Interior.ColorIndex = 3
End If
Next
'Computer eintragen
astrComputer = Array("Client2")
'Excel instanzieren
Set objWorksheet = Application.ActiveSheet
For i = 0 To UBound(astrComputer)
Set objPing = GetObject("winmgmts:").Get("Win32_PingStatus.Address='" & _
astrComputer(i) & "'")
If objPing.StatusCode = 0 Then
objWorksheet.Cells(i + 6, 3).Interior.ColorIndex = 4
Else
objWorksheet.Cells(i + 6, 3).Interior.ColorIndex = 3
End If
Next
End Sub
Bei vielen Rechnern ist das natürlich sehr aufwendig. Geht das auch über eine Variable?
Habt Ihr evtl. einen Lösungsvorschlag für mich?
Danke!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 142744
Url: https://administrator.de/contentid/142744
Ausgedruckt am: 22.11.2024 um 16:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo AlecThunder und willkommen im Forum!
Die gewünschte Funktionalität ist eigentlich schon "eingebaut" - einfach die Liste der Computer in der Zeile
eintragen, also etwa
Alternativ dazu könnte auch die Liste in der Excel-Tabelle erstellt und von dort ausgelesen werden (ungetestet):
Grüße
bastla
Die gewünschte Funktionalität ist eigentlich schon "eingebaut" - einfach die Liste der Computer in der Zeile
astrComputer = Array("Client1")
astrComputer = Array("Client1", "Client2", "Client3", "etc")
Sub PingClients()
Dim objWorksheet, Zeile, Spalte
'Excel instanzieren
Set objWorksheet = Application.ActiveSheet
Zeile = 5
Spalte = "C"
With objWorksheet
Do While .Cells(Zeile, Spalte) <> ""
Set objPing = GetObject("winmgmts:").Get("Win32_PingStatus.Address='" & _
.Cells(Zeile, Spalte) & "'")
If objPing.StatusCode = 0 Then
.Cells(Zeile, Spalte).Interior.ColorIndex = 4
Else
.Cells(Zeile, Spalte).Interior.ColorIndex = 3
End If
Zeile = Zeile + 1
Loop
End With
bastla
Hallo AlecThunder!
die folgende Zeile einfügen:
Grüße
bastla
P.S.: Die Bezugnahme auf geposteten Code ist leichter möglich, wenn dieser zwischen "<code>"- und "</code>"-Tags steht ...
wie sähe der Eintrag für die Ausgabe aus?
Einfach nach der ZeileFor i = 0 To UBound(astrComputer)
objWorksheet.Cells(i + 5, 3).Value = astrComputer(i)
bastla
P.S.: Die Bezugnahme auf geposteten Code ist leichter möglich, wenn dieser zwischen "<code>"- und "</code>"-Tags steht ...
Und was spricht hier gegen eine echte Monitoring Lösung wie http://www.mikrotik.com/thedude.php oder dutzende andere...
Hallo AlecThunder!
Um die Computer aus Zeile 7 anzupingen, sind die Zeilen 14 - 27unnötig, und um umgekehrt die in der Excel-Tabelle ab C5 eingetragenen Rechner anzusprechen, bräuchtest Du alles nach Zeile 27 nicht ...
Grüße
bastla
P.S.: Auch als davon nicht unmittelbar Betroffener habe ich mich gefragt, weshalb Du dogs Hinweis auf eine kostenlose Software als "Werbung" abtust ...
Hast Du eine Idee, wo mein Fehler liegt?
Nicht wirklich (die offensichtlich von Dir bevorzugte Version mit Angabe der Computer in Zeile 7 habe ich eben erfolgreich mit 10 Geräten getestet [Edit] auch die Vorgangsweise mit dem Auslesen aus der Tabelle funktioniert bei mir [/Edit]) - allerdings vermischst Du beide Varianten ...Um die Computer aus Zeile 7 anzupingen, sind die Zeilen 14 - 27unnötig, und um umgekehrt die in der Excel-Tabelle ab C5 eingetragenen Rechner anzusprechen, bräuchtest Du alles nach Zeile 27 nicht ...
Grüße
bastla
P.S.: Auch als davon nicht unmittelbar Betroffener habe ich mich gefragt, weshalb Du dogs Hinweis auf eine kostenlose Software als "Werbung" abtust ...