EP08. “Protect Macro 给宏加密码保护”
🔒 登录后可标记已读- VBA 的宏保护分两层:一层锁住"能不能打开看代码",一层锁住"能不能直接执行"
- 方式一是在 VBAProject Properties 里设密码锁查看权限;方式二是在代码里自己写密码验证逻辑限制执行
- 两种要搭配用:只做方式二,密码等于明文摆在别人打得开的代码里,等于没锁
- 前置知识:知道怎么在 VBA 编辑器里写代码
- 学完能保护自己写的宏不被随意复制或滥用
重点内容
方式一:锁住查看权限(VBAProject Properties)
先建立一个简单的宏:
Sub Secret_Code()
Range("A1").Value = "This is secret code"
End Sub
设置步骤:
- 在 VBA 编辑器里,点击 Tools → VBAProject Properties
- 切到 Protection 标签
- 勾选 "Lock project for viewing"
- 输入密码两次(设置 + 确认)
[截图:VBAProject Properties 窗口的 Protection 标签,Lock project for viewing 勾选框和密码输入栏]
- 点击 OK,保存并关闭 Excel,重新打开文件
- 这时候再想打开 VBA 编辑器查看这个项目的代码,会跳出密码对话框,没有密码看不到代码
[截图:重新打开文件后再次打开 VBA 编辑器,跳出要求输入密码的对话框]
方式二:限制执行权限(代码里验证密码)
Sub Secret_Code()
Dim password As Variant
password = Application.InputBox("Enter Password", "Password Protected")
Select Case password
Case Is = False
'do nothing
Case Is = "easy"
Range("A1").Value = "This is secret code"
Case Else
MsgBox "Incorrect Password"
End Select
End Sub
代码逻辑说明
Application.InputBox("Enter Password", "Password Protected"):弹出输入框要求输入密码,结果存进passwordCase Is = False:如果用户点了 Cancel(InputBox 取消会返回 False),什么都不做Case Is = "easy":密码正确(这里示范密码是 "easy"),才把内容写进 A1Case Else:密码错误,弹出 "Incorrect Password" 提示
方法怎么选
| 方式 | 适合场景 | 备注 |
|---|---|---|
| 方式一:锁查看权限(VBAProject Properties) | 不想让别人打开 VBA 编辑器看到代码 | 忘记密码无法找回,务必记好 |
| 方式二:代码里验证密码 | 想限制"谁能执行"这个宏 | 密码是明文写在代码里,务必搭配方式一才够安全 |
代码怎么运行
Alt + F11打开 VBA 编辑器,Insert → Module,贴入代码- 回到工作表放一个命令按钮,绑定
Secret_Code这个宏 - 点击按钮,会先跳出密码输入框,输对密码才会执行后续操作
[截图:点击命令按钮后弹出的 Enter Password 输入框]
学完你会
- ✅ 会用 VBAProject Properties 锁住宏代码不被查看
- ✅ 会在代码里加一段密码验证逻辑限制执行
- ✅ 懂得两种方式要搭配使用才够安全,单用方式二不够
常见错误
- 方式二的密码是直接写死在代码里的明文("easy"),如果没有先用方式一锁住查看权限,别人打开 VBA 编辑器就能直接看到密码,起不到真正的保护作用
- 忘记 VBAProject 的密码,目前没有官方途径找回,等于永久锁死这份代码,设置前一定要把密码记好
Sources
Blog / Website: