Excel 设置范围时出现错误1004。已锁定
我在尝试设置Range对象的属性时出现了catch all运行时错误1004,“无法设置Range类的锁定属性”。代码如下所示:Excel 设置范围时出现错误1004。已锁定,excel,vba,Excel,Vba,我在尝试设置Range对象的属性时出现了catch all运行时错误1004,“无法设置Range类的锁定属性”。代码如下所示: that_goddamn_sheet.Unprotect ; Determine if we should proceed that_goddamn_range.Locked = True ; Do more stuff that_goddamn_sheet.Protect 当我在行上设置断点并尝试从即时窗口查询该范围的值时,这项操作没有问题,但设置失败 但
that_goddamn_sheet.Unprotect
; Determine if we should proceed
that_goddamn_range.Locked = True
; Do more stuff
that_goddamn_sheet.Protect
当我在行上设置断点并尝试从即时窗口查询该范围的值时,这项操作没有问题,但设置失败
但是,如果我运行这个该死的范围。选择
,断开宏,取消对工作表的保护(在选择更改时会自动重新保护),然后右键单击,选择属性,切换到“保护”选项卡,勾选“锁定”,然后确认,一切正常
可能出了什么问题
[工作表]在选择更改时自动重新保护
出于某种原因,纸张在方法的中间重新保护了自己。在设置Locked
属性之前,再次取消对其的保护修复了我的问题
实际上,我需要在一行中锁定多个区域,并且在每次属性更改之前必须取消对工作表的保护。不能锁定属于合并单元格区域的单元格,除非它是左上角单元格。以下内容适用于任何单元格或单元格的合并区域
Sub LockCells()
Dim R As Range
ActiveSheet.Unprotect
Cells.Locked = False
For Each R In Range("A1", Cells.SpecialCells(xlCellTypeLastCell).Address)
If R.MergeArea.Range("A1").Address = R.Address And R.HasFormula Or IsText(R) Then
R.MergeArea.Locked = True
End If
Next
ActiveSheet.Protect
End Sub
Function IsText(What) As Boolean
IsText = False
On Error Resume Next
IsText = (CDbl(What) <> What)
If Err.Number Then IsText = True
End Function
子锁单元()
调光范围
活动表。取消保护
Cells.Locked=False
对于范围内的每个R(“A1”,单元格.SpecialCells(xlCellTypeLastCell).Address)
如果R.MergeArea.Range(“A1”).Address=R.Address和R.HasFormula或IsText(R),则
R.MergeArea.Locked=True
如果结束
下一个
保护工作表
端接头
函数IsText(What)作为布尔值
IsText=False
出错时继续下一步
IsText=(CDbl(什么)什么)
如果错误编号,则IsText=True
端函数
这里有一个完整的解释:
通常,此错误有两个原因:尝试更改受保护工作表上单元格的锁定的属性和/或尝试更改合并区域中单个单元格的锁定的属性
在第一种情况下,您可以解锁工作表或为其设置UserInterfaceOnly保护,这是强烈建议的,因为这样您就不必重复解锁/锁定工作表
对于合并单元格,您不能锁定属于合并范围的单个单元格,但有合理的选项:
- 如果使用单元格地址符号来引用单元格/区域
Range(“A1”).Locked=True
然后引用整个合并范围:
Range(“A1:A3”).Locked=True'其中“A1:A3”是整个合并范围
- 如果为一组合并单元格使用命名区域,默认情况下,它将被定义为仅引用第一个合并单元格。您可以编辑其定义以包含整个合并范围,也可以使用其MergeArea属性来引用其关联的合并范围:
Range(“SomeNamedRange”).MergeArea.Locked=True
但是请注意,您不能同时执行这两项操作,因为对于不是较大合并区域的严格子集的范围,MergeArea属性显然是未定义的
- 当然,您可以在设置包含单元格的Locked属性之前取消合并合并区域,然后再重新合并,但我从未见过上述两种解决方案中的一种不充分(而且更干净)的情况
我遇到了同样的问题,试图手动隐藏单元格,并收到以下警告:
无法将对象移出工作表。
我的问题是在同一张表格的单元格中出现了一些注释。删除工作表的所有注释后,代码将运行
我的代码在仅用于此目的的列中使用匹配大小写查找行(因为我需要插入一些行,列“B”是我标识行的引用)
我的代码:
Rows((WorksheetFunction.Match(1, Range("B:B"), 0)) - 1 & ":" & (WorksheetFunction.Match(13, Range("B:B"), 0)) + 15).EntireRow.Hidden = True
遇到了类似的问题。结果表明,用户已过滤数据,然后将其保存,并且在未关闭过滤器的情况下,无法更改对过滤数据集的保护。错误消息的文本是什么?@Tim Good point,包括在问题中。