夜雨聆风学习资料网

ARTICLE · 1157787

Excel VBA编程-一键保护工作表与锁定单元格

Excel VBA编程-一键保护工作表与锁定单元格

你辛辛苦苦做好的报表,发给同事,转眼就被改乱了:表头被删、合计公式被覆盖、格式全跑偏。更糟的是,别人无意中一拖一拽,你的数据就面目全非。

今天我们从网络上整理了一批 Excel VBA“保护工作表”的实战技巧(包括 Microsoft 官方文档里关于 Protect、Locked 和允许编辑区域的做法),核心就一句话:用一行代码给表格上锁,锁住不该改的地方,只放开该填的地方。

下面用 3 个由浅入深的案例,带你从“整张锁死”到“智能上锁”。


案例一(简单):一键锁住当前工作表,谁都改不了

功能说明 打开任意一张表,运行这一段,整张表立刻被“上锁”——别人既不能改内容,也不能误删表头。最适合用来把做好的成品表“封存”起来。

代码

Sub 一键保护当前表()    ActiveSheet.Protect    MsgBox "当前工作表已保护,内容不会被误改了!"End Sub

操作步骤

  1. 按 Alt + F11 打开 VBA 编辑器。
  2. 在左侧“工程资源管理器”里,右键你的工作簿 → 插入 → 模块。
  3. 把上面代码整段粘贴进去。
  4. 回到 Excel,按 Alt + F8,选中“一键保护当前表”,点“运行”。
  5. 当前这张表立刻被锁住,并弹出“当前工作表已保护”的提示。
  6. 想解锁?右键底部工作表标签 → “取消工作表保护”即可(案例三还教用代码一键解锁)。

案例二(中等):锁住表头,只放开数据录入区

功能说明 整张锁死虽然省事,但别人连数据都没法填了。这个案例更聪明:先把整张表标记为“锁定”,再把“数据录入区”(第 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

操作步骤

  1. 同案例一,把代码粘贴进同一个模块(或新模块)。
  2. 确认你的表格:第一行是表头,第二行起是你要录入的数据。
  3. 按 Alt + F8 运行“锁定表头放开数据区”。
  4. 表头被锁住改不了,光标点到数据区却可以照常输入,完美兼顾安全与录入。

【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

操作步骤

  1. 把上面两段代码一起粘贴进当前工作簿的模块。
  2. 按 Alt + F8,先运行“一键保护整本工作簿”——整本每一张表都被锁住,密码是 8888。
  3. 需要修改时,运行“一键解除整本保护”,输入同样的密码 8888,全本立刻解锁。
  4. 想要自己的密码,把代码里的 "8888" 改成你想要的任意数字或文字即可。

小提示

  • ActiveWorkbook 指的是“你当前正在看的那本工作簿”,运行前请确认它就是你要保护的那本。
  • 密码写在代码里只为方便演示;正式使用时建议用更私密的密码,或把密码藏在不易被看到的地方。
  • 锁表不会破坏任何数据,只是禁止编辑;随时用“取消工作表保护”就能还原。

今日小结

今天的知识点来自网络上一批“保护工作表”的 VBA 实战做法(含 Microsoft 官方关于 Protect 与锁定区域的思路),我们把它简化成 0 基础也能懂的三步:

  • ActiveSheet.Protect 一键上锁,ActiveSheet.Unprotect 一键解锁;
  • 单元格的 Locked 属性决定“锁住后能不能改”——先全锁、再放开数据区,是既安全又好用的关键;
  • For Each 表 In ActiveWorkbook.Worksheets 能把保护批量铺到整本工作簿的每一张表。

下一篇我们继续往前走:学会一键给单元格加上下拉菜单(数据验证),让录入只能“选”、不能“填错”,从源头堵住脏数据。

相关学习资料