2016-09-02
ExcelVBA覚書 コマンド実行
Dir関数でファイルがないってときに、
ただファイルがないのか、ネットワークにつながってないのかわかんないの?
Ping飛ばしてネットワークにつながってるのか調べたらいいじゃない?
みたいな要件があって、まぁ、正直、「そこまでやるか?」って思ったけど、そういう環境で動いている人は、そういう発想になるんだろうなぁ・・・と思って、教えてもらったPing送信術をアレンジしてExcelに埋め込んでみた。
Public Function CheckNetwork(ip As String) As Boolean
Dim wsh As Object
Dim buf As String
On Error GoTo ErrCheck
Set wsh = CreateObject("WScript.Shell")
wsh.Run "%ComSpec% /c ping -n 1 " & ip & " | clip ", 0, True
buf = GetObject("\" _
, "htmlfile").ParentWindow.ClipboardData.GetData("text")
If InStr(buf, "ラウンド トリップの概算時間") > 0 Then
CheckNetwork = True
End If
Exit Function
ErrCheck:
err.clear
End Function
ちなみに、「%ComSpec%」は、「%SystemRoot%\system32\cmd.exe」のことらしい。
「 | clip」でクリップボードに入れて、それをbufに読み込むようにした。
また、Shellは、Execで動かす方法とRunで動かす方法があるが、Runのほうが、コマンドの窓が表示されないようにできるので、こちらを採用。
面倒な要件は、解決できると嬉しい。
解決しないと、逆恨みしそうだけど。