您是否曾经需要了解计算机的CPU或内存详细信息,序列号或型号,或已安装的软件版本,但是不确定在哪里查找?只需使用Excel中的一些简单代码,您就可以提取Windows PC信息的整个库。
听起来好得令人难以置信吗?嗯,如果您知道如何使用Windows,那就是Windows。
您可能需要动手一点,但是在本文中,我们将为您提供所需的所有代码以及如何使用将其放入Excel并使其起作用。完成后,您将拥有一张Excel工作表,每次您打开它时,它就会告诉您有关计算机系统的所有信息。
请注意,这仅适用于台式机版本的Excel,可以通过Office的免费试用获得。
WMI的魔力
在运行Microsoft操作系统的任何计算机上,您都可以访问一组功能强大的扩展名为Windows Management Instrumentation(WMI),它为您提供了一种非常强大而广泛的方法来访问有关您的计算机,操作系统和已安装的软件的信息和规格。
设置自动电子表格
首先,创建新的Excel工作簿,并将其命名为 MyComputerInfo。 xlsm (启用了宏)。将其打开,跳过Sheet1,然后按以下方式重命名接下来的11张表:
这些将保存您的所有计算机详细信息,并且每次打开此Excel电子表格时都会更新。
下一步,转到开发人员菜单项,然后在控件部分下单击查看代码。
如果您没有看到开发人员菜单项,单击文件>选项>自定义功能区,将选择命令从下拉菜单更改为所有选项卡,选择 Developer ,然后按 Add >>按钮将其添加到“自定义功能区"一侧。添加后,请确保已选中该侧的“开发人员"复选框。
一旦进入VBA代码编辑器,您要做的就是将以下脚本添加到模块中。这些脚本将完成所有繁重的工作。您不必自己编写此代码,只需复制并粘贴它们,如下所示。
使用下一部分的代码完成复制和粘贴后,您要做的就是添加更多代码以加载工作表,就完成了。
好了,准备好复制和粘贴了吗?让我们开始吧。
构建您的WMI模块
此代码的灵感来自一个很棒的Google Sites资源,称为Beyond Excel。所示的示例中有一个名为WMI()的子例程,该子例程将计算机的所有网络信息传递到Excel编程环境的调试区域。
当然,在这里,它对我们没有多大帮助,因此,我修改了代码,以将所有详细信息输出到在本指南的第一步中创建的工作表中。
在编码导航区域中,您还将看到一个部分称为 Modules 和位于 Module1 下的组件。双击打开它。如果没有看到Modules文件夹,请从菜单中展开 Insert ,然后选择 Module 。
该区域是所有子例程所在的位置否则,它将使用WMI提取有关计算机的所有重要信息,并将其加载到您创建的工作表中。
将以下各行全部放在代码窗口的最上方。
Public oWMISrvEx As Object 'SWbemServicesExPublic oWMIObjSet As Object 'SWbemServicesObjectSetPublic oWMIObjEx As Object 'SWbemObjectExPublic oWMIProp As Object 'SWbemPropertyPublic sWQL As String 'WQL StatementPublic n
完成后应该看起来像这样:
将以下代码粘贴到刚创建的行下面的Module1中:
Sub NetworkWMI()sWQL = "Select * From Win32_NetworkAdapterConfiguration"Set oWMISrvEx = GetObject("winmgmts:root/CIMV2")Set oWMIObjSet = oWMISrvEx.ExecQuery(sWQL)intRow = 2strRow = Str(intRow)ThisWorkbook.Sheets("Network").Range("A1").Value = "Name"ThisWorkbook.Sheets("Network").Cells(1, 1).Font.Bold = TrueThisWorkbook.Sheets("Network").Range("B1").Value = "Value"ThisWorkbook.Sheets("Network").Cells(1, 2).Font.Bold = TrueFor Each oWMIObjEx In oWMIObjSetFor Each oWMIProp In oWMIObjEx.Properties_If Not IsNull(oWMIProp.Value) ThenIf IsArray(oWMIProp.Value) ThenFor n = LBound(oWMIProp.Value) To UBound(oWMIProp.Value)Debug.Print oWMIProp.Name & "(" & n & ")", oWMIProp.Value(n)ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.NameThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value(n)ThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeftintRow = intRow + 1strRow = Str(intRow)NextElseThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.NameThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.ValueThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeftintRow = intRow + 1strRow = Str(intRow)End IfEnd IfNext'End IfNextEnd Sub
现在,您将为在本指南第一部分中创建的每个工作表创建一个与此相同的功能,但有一些细微差别。
例如,接下来,您将在上面复制该代码以< em> NetworkWMI(),将其粘贴到该代码的末尾,然后将“ NetworkWMI()"替换为“ LogicalDiskWMI()"
您只需更改几部分,该公司de会填写正确的工作表。
更改此:
sWQL = "Select * From Win32_NetworkAdapterConfiguration"
为此:
sWQL = "Select * From Win32_LogicalDisk"
更改这四行:
ThisWorkbook.Sheets("Network").Range("A1").Value = "Name"ThisWorkbook.Sheets("Network").Cells(1, 1).Font.Bold = TrueThisWorkbook.Sheets("Network").Range("B1").Value = "Value"ThisWorkbook.Sheets("Network").Cells(1, 2).Font.Bold = True
为此:
ThisWorkbook.Sheets("LogicalDisk").Range("A1").Value = "Name"ThisWorkbook.Sheets("LogicalDisk").Cells(1, 1).Font.Bold = TrueThisWorkbook.Sheets("LogicalDisk").Range("B1").Value = "Value"ThisWorkbook.Sheets("LogicalDisk").Cells(1, 2).Font.Bold = True
更改这两行:
ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.NameThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.Value(n)
收件人:
ThisWorkbook.Sheets("LogicalDisk").Range("A" & Trim(strRow)).Value = oWMIProp.NameThisWorkbook.Sheets("LogicalDisk").Range("B" & Trim(strRow)).Value = oWMIProp.Value(n)
这三行内容:
ThisWorkbook.Sheets("Network").Range("A" & Trim(strRow)).Value = oWMIProp.NameThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).Value = oWMIProp.ValueThisWorkbook.Sheets("Network").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
收件人
ThisWorkbook.Sheets("LogicalDisk").Range("A" & Trim(strRow)).Value = oWMIProp.NameThisWorkbook.Sheets("LogicalDisk").Range("B" & Trim(strRow)).Value = oWMIProp.ValueThisWorkbook.Sheets("LogicalDisk").Range("B" & Trim(strRow)).HorizontalAlignment = xlLeft
现在,您快完成了!
为工作簿中的每个选项卡重复以上操作。功能如下:
访问计算机有关信息所需的特殊“ Win32_"对象如下:
在代码的 Module1 区域中完成复制/粘贴和调整所有这些功能。完成后,请继续本指南的下一部分。
请记住,将代码保存在VB视图中!如果最初使用 .xls 文件类型保存工作簿,则Excel现在会要求您使用启用了宏的文件类型,例如 .xlsm 。
现在您已经创建了所有强大的功能,剩下的就是每次打开工作簿时都运行它们。做到这一点真的很容易。
在左侧的对象浏览器中的 Microsoft Excel Objects 下,您应该会看到 ThisWorkbook 。双击该对象将其打开。
在代码区域的顶部,有两个下拉框,将左侧的一个更改为 Workbook ,将右侧的一个更改为< strong>打开。
您会看到一个为您自动生成的函数,称为 Private Sub Workbook_Open()。
在此处,键入以下代码行,因此该函数如下所示:
Private Sub Workbook_Open()NetworkWMILogicalDiskWMIProcessorWMIPhysicalMemWMIVideoControlWMIOnBoardWMIPrinterWMISoftwareWMIOperatingWMIServicesWMIEnd Sub
现在,每次打开工作簿时,都会调用每个新创建的函数,将所有数据,然后将其加载到适当的工作表中。
要查看运行中的数据,请保存代码,关闭代码窗口,保存工作簿,然后再将其关闭。重新打开刚刚关闭的文件,您会发现每个工作表中都包含有关计算机的数据量。
由于工作簿包含宏,出于安全原因可以将其禁用,因此您可能拥有单击工作表顶部的启用内容以收集数据。
警告-它会收集很多数据,因此请等待几分钟以便加载
收集计算机信息
为此使用WMI的神奇之处在于,上面的数据只是冰山一角。有数百种WMI类可用,其中包含有关计算机系统各个方面的信息。
如果您喜欢冒险,并且想进一步迈出这一步,则可以将工作簿的第一页变成仪表板,并使用其他工作表中的数据来提供该仪表板。
最重要的是,使用此新工具,您将能够收集和显示比大多数IT专家甚至意识到更多的信息。一个计算机系统,而这些专家只需花费一小部分时间就可以在控制面板和管理区域中进行挖掘,以查找这些详细信息。
您看到自己了吗?建立和使用这样的工具?您是VBA程序员,并且曾经使用过WMI类吗?在下面的评论部分中分享您自己的经验和想法!
图片来源:Adriano Castelli,通过Shutterstock.com,Mclek通过Shutterstock
标签: 计算机维护 Microsoft Excel Visual Basic编程