如何在指定VBA代码中添加多个MAC地址,限制Excel仅在对应系统运行
支持多个MAC地址的Excel权限控制VBA代码
嘿,要让你的Excel文件支持多个指定MAC地址访问其实很简单,咱们只需要把允许的MAC地址放到一个数组里,然后检查当前机器的MAC是否在这个列表中就行。下面是修改后的完整代码,还附带了几个实用的小优化:
Public Function notmacaddress() As Boolean Dim m As String Dim allowedMACs As Variant Dim i As Integer ' 在这里添加所有允许的MAC地址,直接在数组里追加即可 allowedMACs = Array("11:11:11:11:11:11", "22:22:34:32:55:23", "34:45:45:33:33:11") ' 获取当前机器的MAC地址并统一转成大写,避免大小写差异导致匹配失败 m = UCase(GetMACAddress) ' 默认设为"不允许访问",找到匹配的MAC则改为"允许" notmacaddress = True For i = LBound(allowedMACs) To UBound(allowedMACs) If UCase(allowedMACs(i)) = m Then notmacaddress = False Exit For ' 找到匹配后直接退出循环,提升效率 End If Next i End Function Function GetMACAddress() As String Dim sComputer As String Dim oWMIService As Object Dim cItems As Object Dim oItem As Object Dim myMacAddress As String sComputer = "." Set oWMIService = GetObject("winmgmts:\" & sComputer & "\root\cimv2") Set cItems = oWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True") For Each oItem In cItems If Not IsNull(oItem.IPAddress) Then myMacAddress = oItem.macAddress Exit For End If Next ' 返回格式为MM:MM:MM:SS:SS:SS的MAC地址 GetMACAddress = myMacAddress End Function Private Sub Workbook_Open() If notmacaddress Then ' 添加SaveChanges参数,避免关闭时弹出保存提示 ThisWorkbook.Close SaveChanges:=False End If End Sub
关键修改和优化说明:
- 多MAC支持:把原来的单个MAC常量替换成了数组
allowedMACs,后续要添加新的允许地址,直接在数组里加逗号和新MAC即可,非常方便。 - 大小写兼容:用
UCase()把获取到的MAC和允许列表里的地址都转成大写,避免因为系统返回的MAC是小写(比如aa:bb:cc)而导致匹配失败的问题。 - 安全默认逻辑:默认设置为
notmacaddress = True(即拒绝访问),只有找到匹配的MAC才改为允许,这样即使数组为空或者遍历出错,也能保证文件不会被未授权的机器打开。 - 优化关闭体验:在
ThisWorkbook.Close里添加了SaveChanges:=False,关闭文件时不会弹出保存提示,让整个权限控制流程更顺畅。
内容的提问来源于stack exchange,提问作者wolf
相关产品推荐
相关产品推荐

