paul2014
回答者
回答于 2026-10-27
可通过VBA在工作簿打开时获取当前计算机标识,并与预设的合法设备列表进行比对,不匹配则自动关闭文件。
实现步骤
- 获取计算机标识:使用
Environ("COMPUTERNAME")获取计算机名,或通过WMI查询硬盘序列号、MAC地址等硬件信息作为唯一标识。 - 编写验证代码:按
Alt+F11打开VBA编辑器,在ThisWorkbook模块的Workbook_Open事件中添加判断逻辑。 - 设置允许列表:将两台目标设备的标识写入数组或隐藏单元格中。
- 执行限制操作:若当前标识不在列表中,弹出提示并使用
ThisWorkbook.Close SaveChanges:=False关闭文件。
示例代码(基于计算机名)
Private Sub Workbook_Open()
Dim allowedPCs As Variant
Dim currentPC As String
Dim i As Long
Dim isAllowed As Boolean
allowedPCs = Array("PC_NAME_1", "PC_NAME_2")
currentPC = Environ("COMPUTERNAME")
isAllowed = False
For i = LBound(allowedPCs) To UBound(allowedPCs)
If StrComp(currentPC, allowedPCs(i), vbTextCompare) = 0 Then
isAllowed = True
Exit For
End If
Next i
If Not isAllowed Then
MsgBox "此设备未授权,文件即将关闭。", vbCritical
ThisWorkbook.Close SaveChanges:=False
End If
End Sub
适用条件
- 适用于内部小范围分发的Excel文件管控。
- 需启用宏才能生效,用户必须允许运行VBA代码。
常见误区
- 安全性不足:VBA保护可被破解,禁用宏即可绕过此限制,不能作为高安全级别的防护手段。
- 标识变更:计算机名可由用户自行修改,若依赖计算机名作为标识,改名后将导致无法打开;硬件标识相对稳定但获取方式更复杂。
- 误锁风险:若两台授权设备均不可用,文件将无法打开,建议预留管理员恢复机制。