excel vba ping电脑列表

我正在做一个项目。 我的目标是,从一个Excel列表中ping所有的计算机,但不知道为什么它不工作。 我在这个编程语言中是相当新的,我相信我错过了一些东西,因为我得到了错误信息:Object required

所以这里是我的代码

主要的:

Sub pingall_Click() Dim c As Range c = Target.Name For Each c In Range("A1:N50") If (Left(c, 1) = "C" Or Left(c, 1) = "T") And IsNumeric(Right(c, 6)) And Len(c) = 7 Then c = sPing(c) If c = "timeout" Then MsgBox "timeout" ElseIf c < 16 And c > -1 Then MsgBox "ok" ElseIf c > 15 And c < 51 Then MsgBox "not ok" ElseIf c > 50 And c < 4000 Then MsgBox "big delay" Else MsgBox "error" End If End If Next c End Sub 

function:

 Public 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 = "timeout" 'oRetStatus.StatusCode Else sPing = sPing & vbTab & oRetStatus.ResponseTime & Chr(10) End If Next End Function 

如果我写了sPing(“”),我可以得到结果,但是我希望它能得到列表中的pc-s的名字。 这只是一个脚本的testing版本,现在我正在用一台电脑testing它,这就是为什么我使用“MsgBox”。

谢谢

Sub pingall_Click()子例程中的第二行是Sub pingall_Click() Object Required错误的行。 即下面的行。

 c = Target.Name 

如果您将其注释掉或将其删除,则可以使用。 (我尝试过这个。)

另外,你不应该把函数返回值sPing c 。 因为这样做会覆盖单元格中的服务器/ IP地址的名称,因为forloop使用cvariables一次循环了1个单元。

所以相反,把它分配给一个新的stringvariables,然后做任何你想要的。