背景:锁定EXCEL表头

一、手动操作流程

其基本逻辑并不赋值,手动操作流程是:

1、取消所有单元格的“锁定”格式

CTRL+A,选中全部的单元格→单击右键→设置单元格格式→保护→取消勾选锁定

2、选中指定单元格(需要锁定的单元格)→单击右键→设置单元格格式→保护→勾选锁定

3、点击“审阅”→保护工作表→下面的复选框全部选择→确定→输入密码→再次输入密码即可

二、VBA的方法

 1 Function ProtectRange(rng As Variant)
2 Application.ScreenUpdating = False
3 Dim sh, rg, cell
4 Set sh = ActiveSheet
5
6 '解锁表
7 sh.Unprotect "123456"
8
9 '选择所有的单元格并设置不锁定
10 sh.Cells.Locked = False
11
12 '选择目标单元格,并设置锁定
13 sh.Range(rng).Locked = True
14
15 '锁定表(除了表头不允许修改,其他可以操作)
16 sh.Protect Password:="123456", _
17 UserInterFaceOnly:=True, _
18 DrawingObjects:=False, _
19 Contents:=True, _
20 Scenarios:=False, _
21 AllowFormattingCells:=True, _
22 AllowFormattingColumns:=True, _
23 AllowFormattingRows:=True, _
24 AllowInsertingColumns:= True, _
25 AllowInsertingRows:=True, _
26 AllowInsertingHyperlinks:=True, _
27 AllowDeletingColumns:=True, _
28 AllowDeletingRows:=True, _
29 AllowSorting:=True, _
30 AllowFiltering:=True, _
31 AllowUsingPivotTables:=True
32 Application.ScreenUpdating = 1
33 End Function
34
35 '调用方法:
36 '比如锁定 A1:F1的内容
37 Sub test()
38 ProtectRange(“A1:F1”)
39 End Sub

三、疑难杂症

以上代码本身没有问题,但是我在做某一行(非锁定行)的删除操作的时候,系统提示:“您正试图删除包含有锁定单元格的一行。锁定单元格在工作表受保护时无法删除”。

先要说明白3个逻辑:

(1)如果一行中任意一个单元格设置了“锁定”,在工作表保护时,即使设置了允许删除行,实际上也是删除不了的。假如能删除的话,就破坏了工作表保护这种机制,工作表保护、单元格保护就失去了它原有的作用。

(2)如果一行中所有单元格都取消勾选“锁定”,那么在工作表保护状态下勾选允许“删除行”时,就可以删除这一行。

(3)如果在工作表保护时,没有勾选允许“删除行”,即使所有单元格都取消勾选“锁定",也是不能删除这一行的。

但是我可以明确的是,我删除的行中所有单元格没有被锁定,且已经设置了允许删除行。比如我设置的是第一行锁定,其他单元格统统未被锁定,理论上除了第一行之外是可以删除的。但是系统始终提示:“您正试图删除包含有锁定单元格的一行。锁定单元格在工作表受保护时无法删除”。

经过吃饭的瞬间,我想问题想通了:原因在于,我在编写vba程序的时候调用了change事件,换句话说,整个change事件影响了系统做出判断,系统以为我正在对锁定的第一行进行操作,但是实际上是我在非第一行操作。因此系统进行了报错。

为了验证我的看法,我又测试了另外一个没有change事件的vba程序,的确可以正常删除。由此验证,change事件可能不能与锁定特定单元格的代码同步运行,内部可能存在矛盾机制。希望对有缘人有用!

四、参考资料

[1] http://www.360doc.com/content/17/0510/21/30583536_652812755.shtml

[2] https://docs.microsoft.com/en-us/office/vba/api/excel.worksheet.protect

[3] https://docs.microsoft.com/zh-cn/office/vba/api/excel.range.locked

[4] https://blog.csdn.net/rooklyn21/article/details/22298657

疑难杂症 | Excel VBA锁定指定单元格区域的更多相关文章

  1. excel VBA返回选中单元格区域的行数、列数,以及活动单元格的行号和列号

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) '可以直接sub(),不然选择就会触发vba    Dim rows_coun ...

  2. VBA锁定指定单元格

    Then .Range("AF4").Value = pjno .Range("A1:AH56").Locked = False .Range("F6 ...

  3. 个人永久性免费-Excel催化剂功能第81波-指定单元格区域内容及公式填充

    在日常数据处理过程中,需要对缺失数据进行填充时,按一定逻辑规则进行处理,实现快速填充,规范数据源.此篇给大家带来多种填充数据的场景. 业务使用场景 对各种系统中导出的数据,很多时候存在数据缺失的情况, ...

  4. VBA对指定单元格填充颜色并且赋值

    使用VBA对指定的单元格赋值并填充颜色 ====================================================== 代码区域 ==================== ...

  5. excel VBA把一个单元格内容按逗号拆分并依次替换到另一个单元格的括号里面(本题例子,把文本中的括号换成{答案}的格式,并按顺序填空)

    方法1:运用excel单元格拆分合并实现 思路:用VBA正则查询左侧括号个数,对右侧单元格逐一按逗号.顿号等符号分列,同时左侧按括号分列(分列只能按括号单边分列),分列完成后按要求合并,本题事例把括号 ...

  6. excel VBA正则匹配单元格符号,并按符号把单元格拆分行(这里是按第一列分行,分行是从活动单元格的行开始,分行前需要选择所有需要填充内容的列,否则需要后期手动填充)

    Sub W()   ' MsgBox "行数:" & Selection.Rows.Count    Dim rows_count As Integer    Dim ro ...

  7. 使用VBA将Excel指定单元格数据、字符串或者图表对象插入到Word模板指定书签处

    准备工作: 1.首先需要提供一个word模板,并且标记好您要插入书签的位置,定义书签的命名.如图 2.模拟您要插入的Excel原始数据和图表对象 插入代码如下: Private Sub Command ...

  8. vba打开excel文件遍历sheet的名字和指定单元格的值

    今天项目上有个应用,获取指定Excel文件下的所有sheet的名称以及当前sheet中指定单元格的值,并把他们写到固定的sheet中去,看了下,文件比较多,而且每个文件sheet的个数比较多,也不一样 ...

  9. 个人永久性免费-Excel催化剂功能第62波-单元格区域内数据加解密处理,最有效地保护数据方式

    Excel的数据保护能力有限,诸如之前提及过的工作表保护.工作薄保护等,都是十分微弱的保护措施,而对于强保护的工作薄打开密码来说,它像是个总开关一样,要么全不能看,要么就全看到.有这样的场景需求,一份 ...

随机推荐

  1. 如何在Linux上使用scp命令进行服务器之间的文件/目录传输

    1. 本地上传文件到远程: scp [local_file_path] [username]@[server_ip]:[remote_dir] 2. 本地上传目录到远程: scp -r [local_ ...

  2. tp6 不能使用vendor

    从thinkphp 5.1.x后vendor的使用方法发生变化,文档又没有详细说明.官方真的太坑了! 在thinkPHP 5.1.X后新版取消了Loader::import方法以及import和ven ...

  3. 区块链入门到实战(38)之Solidity – 条件语句

    Solidity支持条件语句,让程序可以根据条件执行不同的操作.条件语句包括: if if...else if...else if 语法 if (条件表达式) { 被执行语句(如果条件为真) } 示例 ...

  4. SEO外包好还是自己组建团队

    http://www.wocaoseo.com/thread-151-1-1.html       营络营销已成为企业不可忽视的一块大肥肉,很多企业都想进来分一杯羹,但是不少企业苦于缺少过硬的技术,无 ...

  5. AD18使用原理图优先选项( Preference)调整原理图纸张大小失效问题解决

    1.创建新的原理图纸后,在当前点击更改并不会生效 2.想要生效需要去原理图纸的文档详细属性中更新即可生效!以下两种方式可以打开文档选项按钮. a.O->D 打开文档选项 b.右下角选择Prope ...

  6. SpringCloud系列之Nacos+Dubbo应用篇

    目录 前言 项目版本 项目说明 项目结构 集成Dubbo2.6.x 支付模块 用户模块 集成Dubbo2.7.x 支付模块 用户模块 测试验证 参考资料 系列文章 前言 本文在前篇文章<Spri ...

  7. 使用docker部署hadoop集群

    最近要在公司里搭建一个hadoop测试集群,于是采用docker来快速部署hadoop集群. 0. 写在前面 网上也已经有很多教程了,但是其中都有不少坑,在此记录一下自己安装的过程. 目标:使用doc ...

  8. Black & White(尺取)

    链接:https://ac.nowcoder.com/acm/contest/893/F来源:牛客网 * 第一行一个整数 T ,表示接下来有 T 个样例.* 首先输入n,m,表示S串的长度n和操作次数 ...

  9. 9.深入k8s:调度器及其源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 这次讲解的是k8s的调度器部分的代码,相对来说比较复杂,慢慢的梳理清 ...

  10. Python 利用三个简易模块熟悉前后端交互流程

    准备工作 在学习Django之前,先动手撸一个简单的WEB框架来熟悉一下前后端交互的整体流程 本次用到的模块: 1.wsgiref,这是一个Python自带的模块,用于构建路由与视图 2.pymysq ...