【问题标题】:How to get the values from Items within Object?如何从对象中的项目中获取值?
【发布时间】:2019-09-23 16:39:45
【问题描述】:

我有以下代码和查询来获取来自 Wlan 连接的发送/接收字节。我想获取每个属性项目的值,但我在尝试这样的时候得到Generic failure

a = WMIvalues.Item(1).Properties_.Item(1).Value

正确的做法是什么?

 Sub Test()
    Dim WMIvalues As Object
    Dim sWQL      As String


    sWQL = "Select BytesReceivedPersec,BytesSentPersec,BytesTotalPersec  from  Win32_PerfRawData_Tcpip_NetworkInterface"

    Set WMIvalues = GetObject("winmgmts:root/CIMV2").ExecQuery(sWQL)

    a = WMIvalues.Item(1).Properties_.Item(1).Value

End Sub

【问题讨论】:

  • 尝试一步一步地为值的链式调用的每个位置分配一个变量。这应该为您指明正确的方向。
  • 查询是异步的吗?您是否尝试在对象设置之前访问它?
  • 另外,_(下划线)在 VBA 中有点问题,因为它也用于编写属于接口的方法。或者用于 VBE 中的换行。
  • 据我猜测,您将不得不使用“Microsoft WMI Scripting V1.2 Library”
  • 由于您的代码使用后期绑定,因此无需添加引用。

标签: excel vba wmi wql


【解决方案1】:

这对我有用:

Dim WMIvalues As Object
Dim sWQL      As String
Dim o As Object, i As Long

sWQL = "Select BytesReceivedPersec,BytesSentPersec,BytesTotalPersec  from  " _
        "Win32_PerfRawData_Tcpip_NetworkInterface"

Set WMIvalues = GetObject("winmgmts:root/CIMV2").ExecQuery(sWQL)

i = 0
For Each o In WMIvalues
    i = i + 1 'increment item counter variable
    Debug.Print o.BytesReceivedPersec, o.BytesSentPersec, o.BytesSentPersec, o.BytesTotalPersec

    'logic here based on i and the o properties...
Next o

见:https://www.activexperts.com/admin/scripts/wmi/vbscript/0473/

【讨论】:

  • 嗨。优秀的蒂姆。感谢您的帮助和共享链接。它似乎也对我有用。只有最后一个问题,因为 WMIvalues 总是我运行有 2 个项目,并且项目 1 显示的值始终为零 0。如果WMIvalue 中有超过 2 个项目,如何运行 For Each o in WMIvalue 以仅显示 Item2 的值并转发?如果它们为零,我不想打印第一个值。谢谢
  • 您可以写一个If 来检查值并采取适当的措施。
  • 是的,我可以使用If o.BytesReceivedPersec <> 0 Then Debug.Print....,但我如何设置If 来检测first Item 的值是否为零?
  • 谢谢!我明白了,检查是否i>0。我想知道与我原来的问题更相似的东西,但也许是不可能的。类似不要打印if WMIvalues.Item(i).Properties_.Item(j).Value=0
  • 似乎没有办法直接索引到WMIvalues
猜你喜欢
  • 1970-01-01
  • 2010-12-31
  • 2019-10-17
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
相关资源
最近更新 更多