MICROSOFT

EP08. “Protect Macro 给宏加密码保护”

首页 Microsoft 工具 Excel · VBA · Create a Macro · EP08
约 6 分钟· #EP08#Excel#Create a Macro
🔒 登录后可标记已读
  • VBA 的宏保护分两层:一层锁住"能不能打开看代码",一层锁住"能不能直接执行"
  • 方式一是在 VBAProject Properties 里设密码锁查看权限;方式二是在代码里自己写密码验证逻辑限制执行
  • 两种要搭配用:只做方式二,密码等于明文摆在别人打得开的代码里,等于没锁
  • 前置知识:知道怎么在 VBA 编辑器里写代码
  • 学完能保护自己写的宏不被随意复制或滥用

重点内容


方式一:锁住查看权限(VBAProject Properties)

先建立一个简单的宏:

Sub Secret_Code()
    Range("A1").Value = "This is secret code"
End Sub

设置步骤:

  1. 在 VBA 编辑器里,点击 Tools → VBAProject Properties
  2. 切到 Protection 标签
  3. 勾选 "Lock project for viewing"
  4. 输入密码两次(设置 + 确认)

[截图:VBAProject Properties 窗口的 Protection 标签,Lock project for viewing 勾选框和密码输入栏]

  1. 点击 OK,保存并关闭 Excel,重新打开文件
  2. 这时候再想打开 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"):弹出输入框要求输入密码,结果存进 password
  • Case Is = False:如果用户点了 Cancel(InputBox 取消会返回 False),什么都不做
  • Case Is = "easy":密码正确(这里示范密码是 "easy"),才把内容写进 A1
  • Case Else:密码错误,弹出 "Incorrect Password" 提示

方法怎么选

方式适合场景备注
方式一:锁查看权限(VBAProject Properties)不想让别人打开 VBA 编辑器看到代码忘记密码无法找回,务必记好
方式二:代码里验证密码想限制"谁能执行"这个宏密码是明文写在代码里,务必搭配方式一才够安全

代码怎么运行

  1. Alt + F11 打开 VBA 编辑器,Insert → Module,贴入代码
  2. 回到工作表放一个命令按钮,绑定 Secret_Code 这个宏
  3. 点击按钮,会先跳出密码输入框,输对密码才会执行后续操作

[截图:点击命令按钮后弹出的 Enter Password 输入框]


学完你会

  • ✅ 会用 VBAProject Properties 锁住宏代码不被查看
  • ✅ 会在代码里加一段密码验证逻辑限制执行
  • ✅ 懂得两种方式要搭配使用才够安全,单用方式二不够

常见错误

  • 方式二的密码是直接写死在代码里的明文("easy"),如果没有先用方式一锁住查看权限,别人打开 VBA 编辑器就能直接看到密码,起不到真正的保护作用
  • 忘记 VBAProject 的密码,目前没有官方途径找回,等于永久锁死这份代码,设置前一定要把密码记好

Sources

Blog / Website:

  1. Protect Macro