代码功能概述
以下VBA代码实现了一个Excel工作簿的保护机制,当用户尝试保存文件时会要求输入密码,只有输入正确密码"123456"才能成功保存。
完整代码及详细注释
类模块代码 (类1.cls)
' 声明一个带有事件的Application对象变量
' WithEvents关键字允许该对象响应事件
Public WithEvents xlApp As Application
' WorkbookBeforeSave事件处理程序
' 在用户尝试保存工作簿时触发
Private Sub xlApp_WorkbookBeforeSave(ByVal Wb As Workbook, _
ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
' 检查当前保存的是否是本工作簿
If Wb Is ThisWorkbook Then
' 弹出输入框要求用户输入密码
' 如果输入不等于"123456",则取消保存操作
If Application.InputBox("请勿修改本文件!") <> "123456" Then
' 设置Cancel为True以阻止保存
Cancel = True
End If
End If
End Sub
标准模块代码 (模块1.bas)
' 声明一个公共变量,作为类1的实例
' 这将用于在整个应用程序中保持事件监听
Public cPub As New 类1
' Auto_Open宏
' 在工作簿打开时自动执行
Sub Auto_Open()
' 将当前Excel应用程序对象赋给cPub的xlApp属性
' 这将激活类模块中定义的事件处理
Set cPub.xlApp = Application
End Sub
代码工作机制说明
-
初始化阶段:
- 工作簿打开时自动执行
Auto_Open
宏 - 将Excel应用程序对象赋给
cPub.xlApp
,建立事件监听
- 工作簿打开时自动执行
-
保存拦截阶段:
- 当用户尝试保存文件时触发
WorkbookBeforeSave
事件 - 检查保存的是否是当前工作簿
- 弹出密码输入框要求验证
- 密码验证失败则取消保存操作
- 当用户尝试保存文件时触发
-
密码验证:
- 正确密码硬编码为"123456"
- 使用简单的输入框进行验证
安全注意事项
- 此保护方式仅能阻止普通用户保存修改
- 有经验的用户可以通过以下方式绕过:
- 禁用宏执行
- 直接查看和修改VBA代码
- 使用其他程序读取文件内容
- 如需更强保护,应考虑:
- 使用Excel内置密码保护
- 加密工作簿
- 将敏感数据存储在更安全的系统中
此代码适合用于防止意外修改或作为多层保护中的一层,但不适合作为唯一的安全措施。