NO.1

vba编程中,有时候需要获取计算机系统信息,比如计算机名称、ID、磁盘容量、磁盘类型等等,那么如何来实现这个功能呢?

下面讲一下,关于获取本地信息的一个简单方法。

这里我们会用到一些很重要的函数(GetObject),这些函数内置在Excel应用中,只要调用即可。

其中还用到Win32_LogicalDisk class,也就是WMI下的一个类。

相关内容可以查看如下网址:

https://docs.microsoft.com/zh-cn/windows/win32/cimwin32prov/win32-logicaldisk?redirectedfrom=MSDN

如何获取计算机ip地址,如何获取计算机ID(1)

NO.2

本节内容相对比较难,需要掌握的知识有一些深度,其代码可能不是十分好理解。

如果只是拿来用一下,直接用就可以,如果要更多地掌握其核心内容,可能要花费不少时间,而且还必须对操作系统有一个十分熟悉的认识。

特别是对于系统底层的一些磁盘结构有了解,还有就是要对注册表相关构造也有认识,再来学习本节内容就相对容易多了。

如何获取计算机ip地址,如何获取计算机ID(2)

NO.3

上图为一个例子,单击按钮自动查找出计算机的ID号来,ID号是每个计算机的身份识别,具有唯一性,就像个人身份证一样。

还有一个功能就是列出本地硬盘的存储信息,也就是存储空间大小。

实现这个功能首先是对注册表进行了一翻查找,找到相关信息后再和计算机属性对比了一下。

然后利用GetObject函数调出对应数据,显示到表格内。

其过程有点麻烦,实现最终结果却毫无波澜。

如何获取计算机ip地址,如何获取计算机ID(3)

NO.4

下面介绍一下代码

将获取计算机ID功能,做成一个函数来实现,只要打开Excel调用这个函数就可将ID显示在表格里。

做得还是比较实用的,如果需要直接拿去调用即可。

Sub getSystemID() '''取计算机ID Dim idObj, id,inobj Set idObj = GetObject("winmgmts:{impersonationLevel=impersonate}") _ .InstancesOf("Win32_OperatingSystem") For Each inobj In idObj If inobj.SerialNumber <> "" Then 'SerialNumber 计算ID号 id = inobj.SerialNumber End If Next ThisWorkbook.ActiveSheet.Range("B2").Value = id End Sub

getobject()将返回win32_operatingsystem下一些相关信息,里面包含了计算机内置信息,有计算机名、系统版本号、ID等等各种你想要的。

详细可查阅下图

如何获取计算机ip地址,如何获取计算机ID(4)

NO.5

相对来说完成这个功能是有一些难度的,毕竟要掌握的知识点比较多,交叉内容也相对复杂,所以做了一些很全面的思考。

编码过程中还有许多函数处理,就不一一贴出来了。

把最重要的部分,如何获取硬盘信息函数分享出来。

Sub DiskSizes() '列出硬盘信息 Dim Disks, Sizes() ReDim Sizes(0) Set Disks = GetObject("winmgmts:{impersonationLevel=impersonate}") _ .InstancesOf("Win32_LogicalDisk") For Each mo In Disks If mo.Size <> "" Then ReDim Preserve Sizes(UBound(Sizes) 1) Sizes(UBound(Sizes)) = mo.Name & "_" & mo.Size End If Next '''''''''''''''''''''''''''''' 保存至表格 ActiveSheet.Range("A2").Select Dim i As Integer For i = 1 To UBound(Sizes) With Selection.Offset(i, 0) .Value = VBA.Left(Sizes(i), 2) .Interior.Color = RGB(211, 211, 1) .Borders.LineStyle = 1 .RowHeight = 30 .VerticalAlignment = xlCenter .HorizontalAlignment = xlCenter End With With Selection.Offset(i, 1) .Formula = VBA.Replace(Sizes(i), VBA.Left(Sizes(i), 2) & "_", "", 1) .Interior.Color = RGB(211, 211, 1) .Borders.LineStyle = 1 .RowHeight = 30 .NumberFormatLocal = "0" .VerticalAlignment = xlCenter .HorizontalAlignment = xlRight .IndentLevel = 2 '缩进 End With Next i End Sub

功能虽简单,但并不是说就很容易掌握,建议不是十分了解操作系统还是不要学习这个了,除没有意义之外,再者就是学会了也不知道用来做什么。

但做为一个对系统有特别热爱的人来说,就必须要掌握了,不过相对了解操作系统的人来说还是很容易的,那些你所知道或不知道的东西就是在那里,只要你去发现,它也没不会乱跑,妥妥地拿出来。

对于靠近系统部分本不是vba的强项,所以我们要用到WMI技术,这就偏离了vba编程的常规路径。

,