VBA-无法直接访问集合内的对象;仅通过“为每个”循环

时间:2019-05-20 10:41:12

标签: excel vba

我正在探索通过VBA获取计算机信息的用途,并因此尝试访问对象集合中的特定项目。但是,当尝试这样做时,我收到以下错误,这绝对使我发疯:

Run-time error '-2147217407 (8001001)': 
Generic failure`

我正在使用的代码如下:

Sub ProcessorInfo()
    Dim cimv2, PInfo, PItem, var
    Dim PubStrComputer As String
    PubStrComputer = "."
    Set cimv2 = GetObject("winmgmts:\\" & PubStrComputer & "\root\cimv2")
    Set PInfo = cimv2.ExecQuery("Select * From Win32_Processor")

    For Each PItem In PInfo
        MsgBox ("Processor: " & PItem.Name & vbCrLf & "Id: " & PItem.ProcessorId)
    Next PItem

    ' Error occurs here: trying to access value directly:
    Debug.Print PInfo(1).Properties_(1).Value

End Sub

我尝试了很多可能的组合来访问变量/值,但始终收到上述错误。

起作用的示例是:

PInfo(1)("Properties_")(1).value

问题:如何在此设置中直接获取特定变量的值?

您可以在下面找到集合的视觉设置:

enter image description here

1 个答案:

答案 0 :(得分:1)

是的,很奇怪。

我可能会这样处理:

target_processor = 1
target_property = 1
this_processor = 0
this_property = 0

For Each PItem In PInfo
    this_processor = this_processor + 1
    For Each prop In PItem.Properties_
        this_property = this_property + 1
        If this_property = target_property And this_processor = target_processor Then
            Debug.Print "Processor: " & PItem.Name & vbCrLf & "Id: " & " " & PItem.ProcessorId & vbCrLf & prop.Name & ": " & prop.Value
        End If
    Next prop
Next PItem

如果您打算使用多个答复,则可以扩展此方法以将整个查询结果复制到一个数组中。