プロが教える店舗&オフィスのセキュリティ対策術

初めて質問します。マクロ初心者です。

ある複数のIPアドレスに対してpingを送信し、

●正常ならば正常
●”宛先ホストに到達できません”、もしくは”受信=0”のときエラー

をそれぞれ返すマクロを作成したいと考えております。

ネットで検索して下記のマクロを作成したのですが、正常と”受信=0”は判別できても
”宛先ホストに到達できません”も正常として返してしまうので困っております。

どなたかご教授くださいませ。宜しくお願い致します。


※マクロの概要です。
D5~D89にIPアドレスを入力。
正常ならばそれぞれ対応した行のE列に”0”を。
異常ありならば、それぞれ対応した行のE列に”1”、F列に”エラー”を入力。


Sub ping送信マクロ 

For i = 5 To Cells(Rows.Count, 4).End(xlUp).Row
cmd = "cmd.exe /c ping " & Cells(i, 4)

Set objWSH = CreateObject("WScript.Shell")

If objWSH.Run(cmd, vbNormalFocus, True) Then
Cells(i, 5) = "1"
Cells(i, 6) = "エラー"

Else
Cells(i, 5) = "0"

End If

Set objWSH = Nothing
Next

End Sub

アドバイスはもちろんですが、何分マクロ触りたてですので”例”として完成したものを
載せて頂けると非常に助かります!

A 回答 (1件)

部分的な完成形ですが、下記を読んでみてください。


コマンドプロンプトの標準出力を取得する
http://www.moug.net/tech/exvba/0150123.html

Result にコマンドの出力結果が格納されます。
これを、
If Instr(Result,"宛先ホストに到達できません")> 0 then
のように調べれば良いでしょう。
こちら(Win7)で少し見た限りでは
"が見つかりませんでした。ホスト名を確認してもう一度実行してください。" や
"転送に失敗しました。一般エラーです。"
などエラーメッセージの拾い出しを行う必要がありそうです。
また、WinXPではそっけない英文メッセージでしたが、Win7では日本語ですので
Vistaの場合はどうなんでしょう。
もしかしたら日本語でも少し表現が異なっている場合も考えられます。

・・・と考えましたが、疎通の確認だけならば
成功した場合には、"ラウンド トリップの概算時間(ミリ秒):"が含まれますので
これを頼りに
Sub ping送信マクロ弐()
  Dim objWSH As Object, oEx As Object
  Dim i As Integer
  Dim sCmd As String
  Dim sResult As String
  
  Set objWSH = CreateObject("WScript.Shell")
  
  For i = 5 To Cells(Rows.Count, 4).End(xlUp).Row
    sCmd = "%ComSpec% /c ping -n 1 " & Cells(i, 4)
    Set oEx = objWSH.Exec(sCmd)
    
    Do While oEx.Status = 0
      DoEvents
    Loop
    sResult = oEx.StdOut.ReadAll
    
    If InStr(sResult, "ラウンド トリップの概算時間") = 0 Then
      Cells(i, 5) = "1"
      Cells(i, 6) = "エラー"
    Else
      Cells(i, 5) = "0"
      Cells(i, 6) = ""
    End If
  Next
  
  Set objWSH = Nothing
End Sub

補足
"ラウンド トリップの概算時間(ミリ秒)" の半角括弧があると
Instr関数がなぜか働かないので、 (ミリ秒) は削りました。
Ping は一回しか打ってません ping -n 1
なお、コマンドのウィンドウが出てきて煩わしいので、
下記のような方法もあります。
http://oshiete.goo.ne.jp/qa/2352463.html
http://www.wmifun.net/sample/win32_pingstatus.html
    • good
    • 0
この回答へのお礼

ありがとうございます。
”ラウンドトリップの概算時間”は盲点でした。
また、わざわざマクロも組んで頂いて感謝です。

無事理想のものができました!
誠にありがとうございました。

お礼日時:2012/07/20 16:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!