ARTICLE · 1157787
Excel VBA编程-一键保护工作表与锁定单元格
Excel VBA编程-一键保护工作表与锁定单元格
你辛辛苦苦做好的报表,发给同事,转眼就被改乱了:表头被删、合计公式被覆盖、格式全跑偏。更糟的是,别人无意中一拖一拽,你的数据就面目全非。
今天我们从网络上整理了一批 Excel VBA“保护工作表”的实战技巧(包括 Microsoft 官方文档里关于 Protect、Locked 和允许编辑区域的做法),核心就一句话:用一行代码给表格上锁,锁住不该改的地方,只放开该填的地方。
下面用 3 个由浅入深的案例,带你从“整张锁死”到“智能上锁”。
案例一(简单):一键锁住当前工作表,谁都改不了
功能说明 打开任意一张表,运行这一段,整张表立刻被“上锁”——别人既不能改内容,也不能误删表头。最适合用来把做好的成品表“封存”起来。
代码
Sub 一键保护当前表() ActiveSheet.Protect MsgBox "当前工作表已保护,内容不会被误改了!"End Sub操作步骤
按 Alt + F11打开 VBA 编辑器。在左侧“工程资源管理器”里,右键你的工作簿 → 插入 → 模块。 把上面代码整段粘贴进去。 回到 Excel,按 Alt + F8,选中“一键保护当前表”,点“运行”。当前这张表立刻被锁住,并弹出“当前工作表已保护”的提示。 想解锁?右键底部工作表标签 → “取消工作表保护”即可(案例三还教用代码一键解锁)。
案例二(中等):锁住表头,只放开数据录入区
功能说明 整张锁死虽然省事,但别人连数据都没法填了。这个案例更聪明:先把整张表标记为“锁定”,再把“数据录入区”(第 2 行往下的区域)放开,最后上锁。结果是——表头纹丝不动,数据区还能照常填写,既防误改又不妨碍录单。
代码
Sub 锁定表头放开数据区() Dim 末行 As Long Dim 末列 As Long Dim 数据区 As Range 末行 = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row 末列 = ActiveSheet.Cells(1, ActiveSheet.Columns.Count).End(xlToLeft).Column ' 先把整张表标记为锁定 ActiveSheet.Cells.Locked = True ' 再把“数据录入区”(第2行到最后一行)放开,可以填写 Set 数据区 = ActiveSheet.Range(ActiveSheet.Cells(2, 1), ActiveSheet.Cells(末行, 末列)) 数据区.Locked = False ' 保护工作表(不填密码) ActiveSheet.Protect MsgBox "表头已锁住,只有数据区可以填写!"End Sub操作步骤
同案例一,把代码粘贴进同一个模块(或新模块)。 确认你的表格:第一行是表头,第二行起是你要录入的数据。 按 Alt + F8运行“锁定表头放开数据区”。表头被锁住改不了,光标点到数据区却可以照常输入,完美兼顾安全与录入。
【SVG 示意图】
案例三(实用):一键保护整本工作簿,还能一键解锁
功能说明 手头一本工作簿有十几张表都要封存?这个案例用“遍历每张表”的思路,给整本工作簿的每一张表统一上锁(带密码),同时再送你一个“一键解锁”的按钮。交接、归档、发给客户前,一键搞定,安全又体面。
代码
Sub 一键保护整本工作簿() Dim 表 As Worksheet Dim 密码 As String 密码 = "8888" For Each 表 In ActiveWorkbook.Worksheets 表.Protect 密码 Next 表 MsgBox "整本工作簿的每一张表都已上锁,密码:8888"End SubSub 一键解除整本保护() Dim 表 As Worksheet Dim 密码 As String 密码 = "8888" For Each 表 In ActiveWorkbook.Worksheets 表.Unprotect 密码 Next 表 MsgBox "整本工作簿已解锁,可以正常编辑了"End Sub操作步骤
把上面两段代码一起粘贴进当前工作簿的模块。 按 Alt + F8,先运行“一键保护整本工作簿”——整本每一张表都被锁住,密码是 8888。需要修改时,运行“一键解除整本保护”,输入同样的密码 8888,全本立刻解锁。 想要自己的密码,把代码里的 "8888"改成你想要的任意数字或文字即可。
小提示
ActiveWorkbook指的是“你当前正在看的那本工作簿”,运行前请确认它就是你要保护的那本。密码写在代码里只为方便演示;正式使用时建议用更私密的密码,或把密码藏在不易被看到的地方。 锁表不会破坏任何数据,只是禁止编辑;随时用“取消工作表保护”就能还原。
今日小结
今天的知识点来自网络上一批“保护工作表”的 VBA 实战做法(含 Microsoft 官方关于 Protect 与锁定区域的思路),我们把它简化成 0 基础也能懂的三步:
ActiveSheet.Protect一键上锁,ActiveSheet.Unprotect一键解锁;单元格的 Locked属性决定“锁住后能不能改”——先全锁、再放开数据区,是既安全又好用的关键;For Each 表 In ActiveWorkbook.Worksheets能把保护批量铺到整本工作簿的每一张表。
下一篇我们继续往前走:学会一键给单元格加上下拉菜单(数据验证),让录入只能“选”、不能“填错”,从源头堵住脏数据。