gpt4 book ai didi

vba - excel vba ping计算机列表

转载 作者:行者123 更新时间:2023-12-02 16:58:15 24 4
gpt4 key购买 nike

我正在做一个项目。我的目标是从 Excel 列表中 ping 所有计算机,但无法弄清楚为什么它不起作用。我对这种编程语言很陌生,我确信我错过了一些东西,因为我收到错误消息:需要对象

这是我的代码

主要:

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

功能:

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 的名称。这只是脚本的测试版本,我现在正在用一台电脑测试它,这就是我使用“MsgBox”的原因。

谢谢

最佳答案

Sub pingall_Click() 子例程中的第二行是抛出 Object required 错误的行。即以下行。

c = Target.Name

如果你注释掉它或者删除它,它就有效。 (我试过了。)

此外,您不应将函数 sPing 的返回值分配回 c。因为这样做会覆盖单元格中的服务器名称/IP 地址,因为 forloop 使用 c 变量一次循环 1 个单元格。

因此,将它分配回一个新的字符串变量,然后用它做任何你想做的事情。

关于vba - excel vba ping计算机列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24442936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com