VBA中Ping主机是否连接的2种方法

分类:代码, 博客 标签:

检测某主机是否连接上时,经常使用Ping命令,但并不是一般人都会很清楚调用cmd来执行这一命令的,这里水文工具集介绍2种采用VBA来实现Ping主机是否连接的方法,第一种是通过创建Wscript.Shell对象来完成,第二种是采用WMI(Windows Management Instrumentation)对象来完成,下面是具体源代码。

第一种方法:VBA中通过Wscript.Shell对象Ping主机是否连接

Option Explicit
'================================
' VBA中通过Wscript.Shell对象Ping主机是否连接
'
' http://cnhup.com
'================================
Function sPing(sHost As String) As String
 
    Dim oFSO As Object, oShell As Object, oTempFile As Object
    Dim sLine As String, sFilename As String
 
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oShell = CreateObject("Wscript.Shell")
    
    sFilename = oFSO.GetTempName
    oShell.Run "cmd /c ping " & sHost & " >" & sFilename, 0, True
    Set oTempFile = oFSO.OpenTextFile(sFilename, 1)
 
    Do While oTempFile.AtEndOfStream <> True
        sLine = oTempFile.Readline
        sPing = sPing & Trim(sLine)
    Loop
    oTempFile.Close
    oFSO.DeleteFile (sFilename)
End Function
 
Sub TestPing()
    MsgBox sPing("www.CnHUP.com")
End Sub 

第二种方法:VBA中通过WMI对象Ping主机是否连接

Option Explicit
'================================
' VBA中通过WMI对象Ping主机是否连接
'
' http://cnhup.com
'================================
Function sPing(sHost) As String
 
    Dim oPing As Object, oRetStatus As Object
 
    Set oPing = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
      ("select * from Win32_PingStatus where address = '" & sHost & "'")
 
    For Each oRetStatus In oPing
        If IsNull(oRetStatus.StatusCode) Or oRetStatus.StatusCode <> 0 Then
            sPing = "Status code is " & oRetStatus.StatusCode
        Else
            sPing = "Pinging " & sHost & " with " & oRetStatus.BufferSize & " bytes of data:" & Chr(10) & Chr(10)
            sPing = sPing & "Time (ms) = " & vbTab & oRetStatus.ResponseTime & Chr(10)
            sPing = sPing & "TTL (s) = " & vbTab & vbTab & oRetStatus.ResponseTimeToLive
        End If
    Next
End Function
 
Sub TestPing()
    MsgBox sPing("www.CnHUP.com")
End Sub

上面两个对象在VBA中可以简单地实现许多高级的功能,这里使用它们Ping主机是否连接也仅是一砖而已,玉等着大家去捡呢。



分类:代码, 博客 标签:

发表评论

You must be logged in to post a comment.