alecthunder
Goto Top

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

ab131b7c4df688f23020ddc4380ab861

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!

Content-Key: 142744

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

Printed on: April 25, 2024 at 00:04 o'clock

Member: bastla
bastla May 12, 2010 at 18:27:44 (UTC)
Goto Top
Hallo AlecThunder und willkommen im Forum!

Die gewünschte Funktionalität ist eigentlich schon "eingebaut" - einfach die Liste der Computer in der Zeile
astrComputer = Array("Client1")
eintragen, also etwa
astrComputer = Array("Client1", "Client2", "Client3", "etc")
Alternativ dazu könnte auch die Liste in der Excel-Tabelle erstellt und von dort ausgelesen werden (ungetestet):
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
Grüße
bastla
Member: padix72
padix72 May 12, 2010 at 18:32:54 (UTC)
Goto Top
Hätte jetzt als ersten Vorschlag, so aus dem Bauch heraus, ohne groß zu überlegen gesagt:

Schleife!

Statt jeden einzeln aus dem Array zu holen, einfach
for i = 1 to 254

ip_des_pc = "192.168.1." & i

ping(ip_des_pc)

next

Nur so als Lösungsvorschlag...
Member: AlecThunder
AlecThunder May 12, 2010 at 19:15:46 (UTC)
Goto Top
Zitat von @bastla:
Hallo AlecThunder und willkommen im Forum!

Die gewünschte Funktionalität ist eigentlich schon "eingebaut" - einfach die Liste der Computer in der Zeile
astrComputer = Array("Client1")
> 
eintragen, also etwa
astrComputer = Array("Client1", "Client2", "Client3",
> "etc")
> 

Hi Basti,

danke für den Anstoss. Daran habe ich auch schon gedacht, aber wie sähe der Eintrag für die Ausgabe aus?
Member: bastla
bastla May 12, 2010 at 19:27:11 (UTC)
Goto Top
Hallo AlecThunder!
wie sähe der Eintrag für die Ausgabe aus?
Einfach nach der Zeile
For i = 0 To UBound(astrComputer)
die folgende Zeile einfügen:
objWorksheet.Cells(i + 5, 3).Value = astrComputer(i)
Grüße
bastla

P.S.: Die Bezugnahme auf geposteten Code ist leichter möglich, wenn dieser zwischen "<code>"- und "</code>"-Tags steht ...
Member: AlecThunder
AlecThunder May 12, 2010 at 19:35:16 (UTC)
Goto Top
Hallo Padix72,

die Clients besitzen dynamische IP´s.
Leider hilft mir das nicht weiter.

Danke für den Tipp!
Member: dog
dog May 13, 2010 at 01:28:37 (UTC)
Goto Top
Und was spricht hier gegen eine echte Monitoring Lösung wie http://www.mikrotik.com/thedude.php oder dutzende andere...
Member: AlecThunder
AlecThunder May 13, 2010 at 06:42:43 (UTC)
Goto Top
Zitat von @dog:
Und was spricht hier gegen eine echte Monitoring Lösung wie http://www.mikrotik.com/thedude.php oder dutzende andere...

..ist nicht die Antwort auf meine Frage, sondern eher Werbung...
Member: AlecThunder
AlecThunder May 13, 2010 at 10:00:34 (UTC)
Goto Top
Hallo Bastia,

ich hab´s mal versucht umzusetzen.
Die Darstellung sieht gut aus, die Zeilen werden rot markiert. Allerdings auch die Online Clients. Der 1. wird noch grün dargestellt.

Des Weiteren wartet nach dem 8. Client Excel auf die Beendigung einer OLE-Aktion in einer anderen Anwendung.

Hier der aktuelle Code:
Sub PingClient()

Dim objWorksheet, Zeile, Spalte, astrComputer

'Computer eintragen  

astrComputer = Array("Client1", "Client2", "Client3", "Client4", "Client5", "Client6", "Client7", "Client8", "Client9", "Client10")  

 
'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


For i = 0 To UBound(astrComputer)
objWorksheet.Cells(i + 5, 3).Value = astrComputer(i)

    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

End Sub


Hast Du eine Idee, wo mein Fehler liegt?

Grüsse

AlecThunder
Member: bastla
bastla May 13, 2010 at 10:17:28 (UTC)
Goto Top
Hallo AlecThunder!
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 ...
Member: AlecThunder
AlecThunder May 13, 2010 at 11:24:29 (UTC)
Goto Top
P.S.: Auch als davon nicht unmittelbar Betroffener habe ich mich gefragt, weshalb Du
dogs Hinweis auf eine kostenlose
Software als "Werbung" abtust ...

Löste nicht wirklich mein Problem. Versuche mein Vorhaben über Excel VBA zu lösen.


Hab´s nun Dank Deiner Hilfe aber hinbekommen! Lag in der Tat an dem unnötigen Procedre ab Zeile 14.- 27 (Hab´s mir schon fast gedacht...)

Vielen Dank für Deine Unterstützung!

Grüsse

AlecThunder