打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
《神奇的VBA》编程:获取硬件相关信息

------ 前言------ 

当学习office办公软件的脚本语言到一定阶段后, 我相信很多朋友们会有对自己工作簿做打开,阅读或者修改等操作权限设置的想法。比如带有脚本的工作簿发给其它工作组同事或者客户、供应商的员工使用时,不希望工作簿被某些人打开,或者只希望工作簿只能被自己打开,或者不允许删除某个工作表,或者修改某个单元格值等等等等。保护的思路有很多,什么常规密码保护工作簿,隐藏工作表, 锁定单元格,通过在某个工作表中预设隐藏的单元格值,或者通过预设的单元格区域名称,或者通过电脑硬件信息等等都可以实现这样的场景需求。本篇分享如何获取硬件信息的示例代码

如何通过VBA获取电脑/笔记本的硬件信息?例如使用下表格式在B列中罗列CPU序列号,计算机名称,计算机用户名,主板序列号,C盘序列号,以及网卡信息。

VBA代码如下:









































Sub 获取本机信息()'获取CPU序列号Set WM = GetObject("winmgmts:\\.\root\cimv2")Set devices = WM.ExecQuery("Select * From Win32_processor")For Each device In devices ID = device.ProcessorIdNext[B1] = ID
'获取计算机名称和用户名称Dim WN As ObjectSet WN = CreateObject("Wscript.Network")[B2] = WN.ComputerName[B3] = WN.UserName
'获取主板序列号Dim Obj As Object, sn As StringFor Each Obj In GetObject("WinMgmts:").InstancesOf("Win32_BaseBoard") sn = Obj.SerialNumberNext[B4] = sn
'获取C盘序列号[B5] = Format(CreateObject("Scripting.FileSystemObject").GetDrive("C:").SerialNumber)
'获取网卡Dim MACSet MAC = GetObject("Winmgmts:").InstancesOf("Win32_NetworkAdapterConfiguration")For Each m In MAC If m.IPEnabled = True Then [B6] = m.MacAddress Exit For End IfNext
'销毁对象Set WM = NothingSet MAC = NothingSet WN = NothingEnd Sub

通过运行上面示例代码,即可得出如下输出结果。(注意下图所示硬件信息已做安全处理,仅做示范)

使用VBA处理职场数据时,写通用函数《神奇的VBA》认为是一个很好的习惯和意识。这样便于后续快速重复调用,减少代码量。针对上面代码,为了更好为我们后续使用,《神奇的VBA》已改写成通用函数,以便后续复用。代码如下: 










Function 获取CPU序列号() As StringSet WM = GetObject("winmgmts:\\.\root\cimv2")Set coldevices = WM.ExecQuery("Select * From Win32_processor")For Each objdevice In coldevices ID = objdevice.ProcessorIdNext获取CPU序列号 = IDSet WM = NothingEnd Function






Function 获取计算机名称() As StringDim WN As ObjectSet WN = CreateObject("Wscript.Network")获取计算机名称 = WN.ComputerNameSet WN = NothingEnd Function






Function 获取用户名称() As StringDim WN As ObjectSet WN = CreateObject("Wscript.Network")获取用户名称 = WN.UserNameSet WN = NothingEnd Function













Function 获取主板序列号() As StringDim Obj As Object, sn As StringFor Each Obj In GetObject("WinMgmts:").InstancesOf("Win32_BaseBoard") sn = Obj.SerialNumberNext获取主板序列号 = snEnd Function

Function 获取硬盘序列号(chr As String) As StringOn Error Resume Next获取硬盘序列号 = Format(CreateObject("Scripting.FileSystemObject").GetDrive(chr).SerialNumber)End Function













Function 获取网卡信息() As StringDim MACDim RLTSet MAC = GetObject("Winmgmts:").InstancesOf("Win32_NetworkAdapterConfiguration")For Each m In MAC If m.IPEnabled = True Then RLT = m.MacAddress Exit For End IfNext获取网卡信息 = RLTSet MAC = NothingEnd Function

在工作簿,工作表事件中调用上面的硬件信息函数结合if..then结构的逻辑判断语句等就可以有针对性的保护工作簿或者工作表相关操作。如果不知道如何使用事件,不知道CreateObject等方法,以及循环遍历的基础知识,请查阅《神奇的VBA》插件学习。 注意本篇代码经过初步验证,可以直接使用,但函数没有做更多容错判断,如果运行错误请自行查找问题。

另外提醒:上面的Fuction函数,放在标准模块后,也可以当做工作表函数在工作表单元格中使用。

------ 结语------ 

在《神奇的VBA》插件中并没有相关内容的介绍。VBA编程语言最恰当的应用场景是更好的处理职场中的相关数据,而不是实用性和功能性较弱的保护措施。本篇纯属扫盲分享。


更多职场Excel VBA数据编程知识(职场牛人必备秘技),可下载安装使用职场高效达人必备的参考和学习工具《神奇的VBA》,一款嵌入进Excel Ribbon界面,打开任意Ms Excel工作簿就能随时参阅和学习Excel VBA编程知识的赋能工具。 我还开发了免费的《Power Click》办公增效插件,如需要请自由下载安装。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
GetObject函数的应用 | VBA实例教程
用VBA提取路径下所有工作簿的工作表名(四个方法)
VBA送你的字典请查收
VBA和VB应用程序之异同和相互移植
34,多工作簿多工作表汇总(GetObject)
VBA提高篇35 VBA操作Word/PPT/Access_CreateObject/GetObject_getobject vba
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服