VBA - Не удается получить доступ к объекту внутри коллекции напрямую;только через цикл «для каждого» - PullRequest
2 голосов
/ 20 мая 2019

Я изучаю использование получения компьютерной информации через 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 Ответ

1 голос
/ 20 мая 2019

Да, это странно.

Возможно, я бы просто решил это следующим образом:

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

Вы можете расширить этот метод, чтобы скопировать весь результат запроса в массив, если вы намереваетесьиспользовать несколько ответов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...