我曾经构建了一个VBA按钮来自动锁定包含数据的所有单元格。它运作得很好。现在我想将该按钮复制到另一个工作表。所以我创建了另一个按钮,复制并粘贴整个VBA,然后编辑工作表名称和范围。并且,它只在5%的时间内工作,其余时间,我得到了"运行时错误' 1004':没有找到细胞"我已经尝试了一些固定的,将工作表改为工作表,或添加了一个",23"特殊论点的论点。但是,现在没有任何工作。当我尝试踩到时,它有时会说rng和lckrng都是空的,有时只显示lockrng为空并且根本不显示rng。问题是这曾经是一个有效的代码,现在,它仍然可以在大约5%的时间内运行。知道为什么吗?非常感谢你!
Private Sub CommandButton1_Click()
Dim rng As Range
Dim lockrng As Range
Sheets("Uploading Checklist (M)").Unprotect Password:="signature"
Set rng = Range("A1:M14")
'Selecting hardcoded data and formulas
Set lockrng = Union(rng.SpecialCells(xlCellTypeConstants), rng.SpecialCells(xlCellTypeFormulas))
lockrng.Locked = True
Sheets("Uploading Checklist (M)").Protect Password:="signature"
End Sub
答案 0 :(得分:3)
也许这太简单了,但它似乎做你想要的。动画.gif显示它正在“锁定包含数据的所有单元格”。 (我为了方便而制作了第二个按钮)。如果没有别的东西,从这样的东西开始可能是好的,它可以起作用并根据你的需要进行修改。
Dim cell As Range, sh As Worksheet
Sub Button4_Click()
Set sh = Worksheets("Sheet1")
sh.Unprotect Password:="s"
For Each cell In sh.UsedRange
If cell <> "" Then cell.Locked = True Else cell.Locked = False
Next
sh.Protect Password:="s"
End Sub
Sub Button5_Click()
Set sh = Worksheets("Sheet1")
sh.Unprotect Password:="s"
End Sub
答案 1 :(得分:2)
如果其中一个参数为Union
,则您尝试的Nothing
将无效(即您在该范围内没有常量,或者您在该范围内没有公式)。
在执行Union
之前,您应该检查参数是否不是Nothing
,但是,一旦您开始更改代码来执行此操作,在两个锁定中执行锁定就会非常简单部分 - 所以我建议你重写代码如下:
Private Sub CommandButton1_Click()
With Sheets("Uploading Checklist (M)")
.Unprotect Password:="signature"
With .Range("A1:M14")
'Lock any constants
If Not .SpecialCells(xlCellTypeConstants) Is Nothing Then
.SpecialCells(xlCellTypeConstants).Locked = True
End If
'Lock any formulas
If Not .SpecialCells(xlCellTypeFormulas) Is Nothing Then
.SpecialCells(xlCellTypeFormulas).Locked = True
End If
End With
.Protect Password:="signature"
End With
End Sub