excel - VBA在工作表的给定范围内保护和取消保护
问题描述
我已应用此宏来保护和取消保护工作表中给定范围的单元格这是我在此宏中面临的一个问题当我运行此宏时,此宏在给定的单元格 A1 到 D20 范围内进行保护,当我再次运行时这个宏在给定范围内取消保护它不是取消保护
Sub lockcells()
Dim Rng
Dim MyCell
Set Rng = Range("A1:D20")
For Each MyCell In Rng
If MyCell.Value = "" Then
Else: ActiveSheet.UnProtect Password:="123"
MyCell.Locked = True
MyCell.FormulaHidden = False
ActiveSheet.Protect Password:="123", UserInterFaceOnly:=True
End If
Next
End Sub
我想用单个宏保护和取消保护
解决方案
一些小的调整使其“保护/取消保护”。我假设您只想保护/锁定一个不为空的单元格。
Option Explicit
Sub lockcells()
Dim Rng As Range
Dim MyCell As Object
Set Rng = Range("A1:D20") 'Set range to lock cells
If ActiveSheet.ProtectContents = True Then 'Check if sheet is protected
ActiveSheet.Unprotect Password:="123" 'Password to unprotect
Else
For Each MyCell In Rng
If MyCell.Value <> "" Then 'If cell is empty, if not empty lock the cell
MyCell.Locked = True 'Lock cell
MyCell.FormulaHidden = False 'Don't hide formulas
End If
Next MyCell
ActiveSheet.Protect Password:="123", UserInterFaceOnly:=True 'Protect Sheet
End If
End Sub
如果您希望除范围之外的所有单元格都是可编辑的,您可以添加以下代码:
'Else
ActiveSheet.Cells.Locked = False
ActiveSheet.Cells.FormulaHidden = False
'For Each MyCell In Rng
这将使仅Range("A1:D20")
受密码保护。所有其他单元格都可以自由编辑。
推荐阅读
- mql4 - 如何在 EA 中禁用“停止时关闭”?
- assembly - gdb以错误的顺序读取汇编x86指令
- reactjs - 如何在 redux 操作中访问反应上下文和/或挂钩
- spring-boot - 使用 Azure Keyvault 的 IBM MQ 客户端
- php - Foreach 循环 JSON 获取特定值
- c++ - 我的第一个 C++ 项目的未定义引用链接器错误
- python - 如何创建条形图来显示 python pandas 中每个唯一哈希的真值和假值
- wpf - WPF:当第二列内容折叠时,DataGrid 不会扩展以占据 Grid 的两列
- scala - 当我有“thunk”时如何覆盖方法
- javascript - 在 Internet Explorer 下载参数上通过 REST API 获取的保存虚拟文件不起作用