Hallo Ralf
Danke, Ich hätte mir auf die Zunge Beißen können, das ich da nicht selbst drauf gekommen bin.
Jetzt ist mir aufgefallen das wenn ich das Makro durchlaufen lasse, schreibt es mir überall in Spalte "S" 0 rein.
Ich habe herausgefunden, das der Ping aufruf eine Zeit braucht bis er die 1 zurück gibt.
Bis dahin ist das Programm bereits über den Schreiben der Variablen "Pingtest" drüber.
Ich habe es jetzt erst einmal ganz primitiv über ein "Sleep 2000" überbrückt.
Das funktioniert auch erstmal.
Lieber wäre es mir aber wenn ich das Makro solange anhalten könnte bis der Ping fertig ist.
Ich nehme an, das es da etwas gibt.
Könnte z.B. objExec.status sein.
Oder irgendein anderer Teil der Variablen.
Ich habe bei Google leider keine einfache Beschreibung des Ping gefunden.
Vielleicht kennt ja von euch jemand die Variable?
Set objExec = WSHShell.Exec("%comspec% /c Ping " & strText & " -n 1 -w 1000")
Was bedeutet zum Beispiel das "-w 1000"
"%comspec% /c Ping " 'das scheint der Ping aufruf zu sein
& strText & ' da ist die IP drin
-n 1 ' die Anzahl der Durchläufe (hier 1x)
w 1000 ' Das ist wohl eine Zeit, ich weis aber nicht welche.
Wie immer danke ich euch sehr für eure Hilfe
Das ist mein aktueller Code:
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
Public Sub Aufruf()
Dim Zelle As Range
'Dim objExec As Object
For Each Zelle In Range("N13:N15")
If Zelle.Value Like "?*.?*.?*.?*" Then
Cells(Zelle.Row, "S") = pingtest(Zelle.Value)
End If
Next
End Sub
Function pingtest(strText As String)
Dim ws As Worksheet
Dim WSHShell As Object
Dim objExec As Object
Set WSHShell = CreateObject("WScript.Shell")
Set objExec = WSHShell.Exec("%comspec% /c Ping " & strText & " -n 1 -w 1000")
' Do Until objExec.Status ' Das habe ich aus einem anderen Code, gibt aber Fehler aus.
' 'WScript.Sleep 10
' i = i + 1
' If i > 100 Then objExec.Terminate
' Loop
Sleep 2000
pingtest = objExec.ExitCode 'objExec.StdOut.readall
'Range("S1").Value = objExec.exitcode
End Function
|