夜雨聆风学习资料网

ARTICLE · 1309849

Excel VBA编程-一键批量保护所有工作表(统一加密码)

Excel VBA编程-一键批量保护所有工作表(统一加密码)

上一讲我们学会了用 VBA 把“整本工作簿的每一张表”的首行都冻结住。其实批量处理的思想一模一样:把工作簿里的表一张一张轮着处理。就在更早的「保护工作表与锁定单元格」那一篇,我们又学会了给“单张表”上锁(Protect)和解锁(Unprotect)。

把这两件事合在一起,就诞生了今天这个超实用功能:一键给整本工作簿的所有工作表,统一加上同一个密码保护。你再也不用一张一张右键“保护工作表”、输一遍密码了——尤其是一本工作簿有几十张分店表、月度表的时候,这一招能省下大把时间。

(本讲用到的“循环遍历每张表”写法,正是上上篇的老朋友;上锁解锁的写法,是「保护工作表」那篇的老朋友。不引入任何新难点。)

知识点:批量保护的核心套路

我们之前给单张表上锁,写的是 ActiveSheet.Protect(或带密码 ActiveSheet.Protect "8888")。要给“所有表”都上锁,只要给它套一层循环:

  1. 用 For Each 表 In ActiveWorkbook.Worksheets 把工作簿里的每一张表都轮一遍。
  2. 在循环里,对当前这张表直接写 表.Protect 密码 —— 注意,这里不需要像冻结窗格那样先“切到这张表”(Activate)。Protect 和 Unprotect 是直接作用在“表对象”身上的,指哪张锁哪张。
  3. 循环转完一圈,整本工作簿的每一张表就都被同一把密码锁住了。

解锁也一样:把循环里的 Protect 换成 Unprotect,配上同一个密码,整本就一次性解开了。网络上(比如 Excel 权威站 ExcelRibbon.Tips、xlncad、extendoffice 等)给出的“一次性保护所有表”代码,用的全是这个 For Each 遍历 + 表.Protect Password 的组合。

【SVG 示意图】

案例一(简单):一键给整本工作簿所有表加上同一密码

功能说明:把当前工作簿里每一张表都用固定密码“8888”保护起来。最适合“做完一整本报表、要发给客户或同事前”一次性封存。运行一次,翻到任何一张表都改不动,安全又省心。

操作步骤:

  1. 按 Alt + F11 打开 VBA 编辑器,插入一个“模块”。
  2. 把下面代码整段粘贴进去。
  3. 回到 Excel,确认目标工作簿是打开的那个。
  4. 按 Alt + F8,选中“一键批量保护所有表”,点“运行”。
  5. 弹窗提示后,随便翻几张表试试改内容,会发现都改不动了。
Sub 一键批量保护所有表()    Dim 表 As Worksheet    For Each 表 In ActiveWorkbook.Worksheets        表.Protect "8888"    Next 表    MsgBox "整本工作簿的每一张表都已经上锁,密码是 8888。", vbInformationEnd Sub

小提示:For Each 表 In ActiveWorkbook.Worksheets 就是“把每张表轮流处理一次”。循环里只有一句核心 表.Protect "8888"——给当前这张表上锁,密码是 8888。想换成你自己的密码,把 "8888" 改成别的文字或数字即可,比如 "2026报表"。

案例二(中等):弹窗输入密码,批量保护所有表

功能说明:和上一条一样是“批量加锁”,但密码不再写死在代码里,而是运行时弹窗让你自己输入。这样你每次用都能设不同的密码,也更安全(不用把密码明晃晃写在代码里给别人看到)。如果啥都不输就点确定,程序会贴心地取消操作,不会乱锁。

操作步骤:

  1. 在模块里再粘贴下面代码。
  2. 回到 Excel,按 Alt + F8,选中“批量保护自选密码”,点“运行”。
  3. 弹窗里输入你想设的密码(比如“财务部2026”),点确定。
  4. 整本工作簿所有表立刻用这个密码锁好,并弹出提示。
Sub 批量保护自选密码()    Dim 表 As Worksheet    Dim 密码 As String    密码 = InputBox("请设置保护工作表的密码(所有表用同一个):", "批量保护")    If 密码 = "" Then        MsgBox "没有输入密码,已取消操作。", vbExclamation        Exit Sub    End If    For Each 表 In ActiveWorkbook.Worksheets        表.Protect 密码    Next 表    MsgBox "整本工作簿的所有工作表都已用你设置的密码保护好了。", vbInformationEnd Sub

小提示:关键的 If 密码 = "" Then ... Exit Sub 是“先判断再动手”——你如果直接点取消或留空,它就什么都不做、安全退出,不会拿空密码去锁表。ActiveWorkbook 指的是“你当前正在看的那本工作簿”,运行前请确认它就是你要保护的那本。

案例三(实用):一键批量取消整本工作簿的所有保护

功能说明:上锁之后,总有一天你要改数据。这个案例是案例二的“反向操作”——弹窗输入原来的密码,把整本工作簿里所有被保护的表一次性解锁。它还会先判断“这张表现在到底锁没锁”,只有锁着的才去解,没锁的就不碰,干净利落。

操作步骤:

  1. 在模块里粘贴下面代码(和前面的保护代码放在同一个模块里最方便)。
  2. 按 Alt + F8,选中“一键取消整本保护”,点“运行”。
  3. 弹窗里输入当初设的那个密码,点确定。
  4. 整本工作簿解开,所有表恢复可编辑,并弹出提示。
Sub 一键取消整本保护()    Dim 表 As Worksheet    Dim 密码 As String    密码 = InputBox("请输入原来设置的密码:", "取消保护")    For Each 表 In ActiveWorkbook.Worksheets        If 表.ProtectContents = True Then            表.Unprotect 密码        End If    Next 表    MsgBox "整本工作簿的所有保护都已取消,现在可以正常编辑了。", vbInformationEnd Sub

小提示:表.ProtectContents = True 的意思是“这张表当前处于保护状态”。加上这个判断,已经没锁的表就不会被白白处理一遍。注意:取消保护时输的密码,必须和当初上锁时一模一样,否则 Excel 会报错说密码不对。所以上锁后一定把密码记在安全的地方。

知识点小结

  • 批量保护 = 单张上锁 表.Protect 密码,外面套一个 For Each 表 In ActiveWorkbook.Worksheets ... Next 表 循环。
  • Protect / Unprotect 直接作用在“表对象”上,不需要先 Activate 切到那张表,比冻结窗格省一步。
  • 密码可以写死在代码里(案例一),也可以用 InputBox 运行时输入(案例二);解锁用 表.Unprotect 密码,密码要和当初一致。
  • “先判断再动手”是好习愦:If 表.ProtectContents = True Then 能只对已锁的表解锁,避免多余操作。
  • 工作表保护是为了防止误改和随手乱动,不是强加密;真有敏感数据,请用“文件 → 信息 → 用密码加密”给整本文件上锁。

往期精选(同系列教程)

  • Excel VBA编程-一键批量冻结所有工作表的首行
  • Excel VBA编程-一键冻结首行
  • Excel VBA编程-一键保护工作表与锁定单元格
  • Excel VBA编程-一键删除表格里的空行和空列
  • Excel VBA编程-一键从文本里提取指定内容

其他信息

  • 作者:西哥的AI幻觉
  • 本文代码均已测试,可直接复制到 Excel VBA 编辑器运行。
  • 文件请保存为 .xlsm 格式(启用宏的工作簿),否则代码无法保存。
  • 运行前请确认目标工作簿是打开的那个;批量上锁后若要修改,记得用案例三按原密码解开。
  • 密码只存在你脑子里或密码管理器里最安全;写在代码里任何人打开 VBA 编辑器都能看到。
  • 若工作簿本身处于“共享”状态,保护操作可能会报错,建议先取消共享再批量保护。

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料