Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
992to996
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
992to996
992to996
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Ping in Endlosschleife abfragen, stoppt nicht mehr

Ping in Endlosschleife abfragen, stoppt nicht mehr
18.07.2008 13:48:24
Oliver
Ich möchte per Button eine ping-Abfrage mehrerer Computer fortwährend laufen lassen. Zudem soll die Abfrage nicht den ganzen Rechner lahm legen, was Sie derzeit macht.
Leider kann ich die Endlosschleife, die per Button gestartet wird und eigentlich auch wieder gestoppt werden woll, trotz DoEvents auch nicht unterbrechen. Ich habe jetzt schon alles probiert. Hier mein aus dem Forum und eigenen Ideen zusammengebastelter Ansatz:

Sub CommandButton1_Click()
Dim rng As Range
If CommandButton1.Caption = "Start" Then
CommandButton1.Caption = "Stop"
Else
GoTo ende
End If
While CommandButton1.Caption = "Stop"
DoEvents
Set rng = Range("A2")
Do Until IsEmpty(rng.Value)
On Error Resume Next
v = Shell("cmd.exe /C ping " & rng.Value & ">C:\Ping" & rng.Value & ".txt")
If Err = 0 Then
Do
DoEvents
AppActivate v
Loop Until Err  0
On Error GoTo 0
Application.Wait 1000
Open "C:\Ping" & rng.Value & ".txt" For Input As #1
Do Until EOF(1)
Line Input #1, sTxt
If InStr(sTxt, "Verloren") Then
sTime = Right(sTxt, Len(sTxt) - InStr(sTxt, "Verloren") - 10)
sTime = Left(sTime, InStr(sTime, " (") - 1)
rng.Offset(0, 1).Value = sTime
End If
Loop
rng.Offset(0, 2).Value = "=NOW()"
rng.Offset(0, 2).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Close #1
Else
rng.Offset(0, 1) = "Failed to shell"
End If
Set rng = rng.Offset(1, 0)
Loop
Wend
ende:
CommandButton1.Caption = "Start"
End Sub


6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ping in Endlosschleife abfragen, stoppt nicht mehr
18.07.2008 14:50:41
Tino
Hallo,
dies liegt daran, solang wie ein Makro läuft, wird Excel und seine Umgebung lahmgelegt.
Ist zwar etwas umständlicher, mit Application.OnTime kannst du bei geschickter Programmierung
dies umgehen.
Hier mal ein kleines Beispiel.
https://www.herber.de/bbs/user/53952.xls
Vielleicht gibt es auch eine andere Möglichkeit, ich lass die Frage noch offen.
Gruß Tino

www.VBA-Excel.de


AW: Ping in Endlosschleife abfragen, stoppt nicht mehr
18.07.2008 15:36:30
Oliver
Erst einmal vielen Dank Tino!
Leider sagt er mir nach der eingestellten Zeit jedesmal,
dass Excel das Makro nicht finden kann, obwohl er am richtigen Platz nach der richtigen Bezeichnung sucht. Ich verstehe das nicht.

Anzeige
AW: Ping in Endlosschleife abfragen, stoppt nicht mehr
18.07.2008 15:48:00
Tino
Hallo,
wie in meinem Beispiel, sollte sich dein Makro in einem Modul befinden. ;-)
Gruß Tino

AW: Ping in Endlosschleife abfragen, stoppt nicht mehr
18.07.2008 15:43:49
fcs
Hallo Oliver,
du solltest die ping-Abfrage per OnTime im gewünschten Zeittakt starten.
Die Ontime-Aktion kanst du dann auch per Button Starten/Stoppen, wobei du besser 2 Buttons verwendest als den Wechsel der Caption-Eigenschaft zu prüfen.
Den nachfolgenden Code muss du in ein allgemeines Modul deiner Datei packen und anpassen.
Die StartTimer und StopTimer-Prozedur startest du dann per Button.
Gruß
Franz

Public datTime As Date
Public wb As Workbook
Public Const strOntimeProcedure = "subAktion" 'Name der per Timer gestarteten Procedur
Public Const strTimeDiff = "00:00:10" '10 Sekunden
Sub StartTimer()
Call subAktion
End Sub
Sub StopTimer()
On Error Resume Next 'falls Timer nicht gestartet wurde
Application.OnTime Earliesttime:=datTime, Procedure:=strOntimeProcedure, schedule:=False
End Sub
Sub subAktion()
MsgBox "TimerTest"  'Testzeile
GoTo weiter01       'Testzeile
Dim rng As Range
DoEvents
Set rng = ThisWorkbook.Worksheets("Tabelle1").Range("A2")
Do Until IsEmpty(rng.Value)
On Error Resume Next
v = Shell("cmd.exe /C ping " & rng.Value & ">C:\Ping" & rng.Value & ".txt")
If Err = 0 Then
Do
DoEvents
AppActivate v
Loop Until Err  0
On Error GoTo 0
Application.Wait 1000
Open "C:\Ping" & rng.Value & ".txt" For Input As #1
Do Until EOF(1)
Line Input #1, sTxt
If InStr(sTxt, "Verloren") Then
sTime = Right(sTxt, Len(sTxt) - InStr(sTxt, "Verloren") - 10)
sTime = Left(sTime, InStr(sTime, " (") - 1)
rng.Offset(0, 1).Value = sTime
End If
Loop
rng.Offset(0, 2).Value = "=NOW()"
rng.Offset(0, 2).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Close #1
Else
rng.Offset(0, 1) = "Failed to shell"
End If
Set rng = rng.Offset(1, 0)
Loop
weiter01:    'Testzeile
datTime = Now + CDate(strTimeDiff)
Application.OnTime Earliesttime:=datTime, Procedure:=strOntimeProcedure
End Sub


ggf. sollte man auch noch eine Workbook_BeforeClose Prozedur unter DieseArbeitsmappe einfügen


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call StopTimer
End Sub


Anzeige
AW: Ping in Endlosschleife abfragen, stoppt nicht mehr
18.07.2008 16:00:00
Oliver
Noch einmal vielen Dank Euch beiden.
Jetzt läuft es auch so wie ich es mir vorgestellt habe. Das einzige Problem sind noch die Dos-Fenster. Während der Code läuft, lässt sich nicht mehr vernünftig weiter arbeiten.
Kennt Ihr da vielleicht auch noch eine Lösung?
Gruß Oliver

AW: Ping in Endlosschleife abfragen, stoppt nicht mehr
18.07.2008 16:40:32
Tino
Hallo,
versuche es mal so.

v = Shell("cmd.exe /C ping " & Rng.Value & ">C:\Ping" & Rng.Value & ".txt", vbHide)


ich weis aber nicht was in der Zeile
AppActivate v
passieren soll?
Gruß Tino

www.VBA-Excel.de


Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige