Excel VBA: нужна помощь, чтобы получить определенное свойство (Properties.Name) только от объекта - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь получить информацию о процессоре, например, имя Intel® Core ™ (i5-7200U CPU @ 2,50 ГГц) При поиске в Интернете я получил несколько методов и кодов и, наконец, собрал функциюкоторый дает мне все свойства процессора, используя цикл for-each.Ниже приведена полная функция и образец ссылки также прилагается.Я пытаюсь получить только имя свойства.Может ли кто-нибудь помочь мне получить name property без цикла for-each или другим методом, чтобы я мог получить только имя процессора.Я буду использовать этот код для сбора жесткого диска, ОЗУ, процессора информации, но не всей информации, только имени, размера и т. Д. Заранее спасибо.

Пример файла Скачать Ссылка

Public oWMISrvEx As Object 'SWbemServicesEx
Public oWMIObjSet As Object 'SWbemServicesObjectSet
Public oWMIObjEx As Object 'SWbemObjectEx
Public oWMIProp As Object 'SWbemProperty
Public sWQL As String 'WQL Statement
Public n


Sub ProcessorWMI()
Dim sht As Worksheet

Set sht = ThisWorkbook.Sheets("Processor")

sWQL = "Select * From Win32_Processor"
Set oWMISrvEx = GetObject("winmgmts:root/CIMV2")
Set oWMIObjSet = oWMISrvEx.ExecQuery(sWQL)
intRow = 2
strRow = Str(intRow)

sht.Range("A1").Value = "Name"
sht.Cells(1, 1).Font.Bold = True

sht.Range("B1").Value = "Value"
sht.Cells(1, 2).Font.Bold = True

For Each oWMIObjEx In oWMIObjSet
    For Each oWMIProp In oWMIObjEx.Properties_
        If Not IsNull(oWMIProp.Value) Then

            If IsArray(oWMIProp.Value) Then
                For n = LBound(oWMIProp.Value) To UBound(oWMIProp.Value)
                    Debug.Print oWMIProp.Name & "(" & n & ")", oWMIProp.Value(n)
                      sht.Range("A" & Trim(strRow)).Value = oWMIProp.Name
                        sht.Range("B" & Trim(strRow)).Value = oWMIProp.Value(n)
                        sht.Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
                       intRow = intRow + 1
                    strRow = Str(intRow)
                Next

                Else
                    sht.Range("A" & Trim(strRow)).Value = oWMIProp.Name
                       sht.Range("B" & Trim(strRow)).Value = oWMIProp.Value
                        sht.Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
                       intRow = intRow + 1
                    strRow = Str(intRow)
            End If

        End If
    Next
Next
End Sub

1 Ответ

0 голосов
/ 28 сентября 2018

Самый простой способ получить имя процессора

Sub ProcessorName()
    Dim objPross As Object, cpu As Object

    Set objPross = GetObject("WinMgmts:").instancesof("Win32_Processor")

    For Each cpu In objPross
        Debug.Print cpu.Name
    Next
End Sub

Когда я запускаю код, я получаю Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz.

Это послужит моей цели.В любом случае есть ли в вашем коде список свойств объекта CPU, например, name?- Harun24HR 14 секунд назад

Вы можете прочитать имя непосредственно из реестра тогда?

Sub ProcessorName()
    Dim objWsScript As Object

    Set objWsScript = CreateObject("WScript.Shell")

    Debug.Print objWsScript.RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0\ProcessorNameString")
End Sub
...