Excel VBA代码用于选择有时有效数据的所有单元格

时间:2017-09-06 04:15:57

标签: excel vba excel-vba

我曾经构建了一个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

2 个答案:

答案 0 :(得分:3)

也许这太简单了,但它似乎做你想要的。动画.gif显示它正在“锁定包含数据的所有单元格”。 (我为了方便而制作了第二个按钮)。如果没有别的东西,从这样的东西开始可能是好的,它可以起作用并根据你的需要进行修改。

enter image description here

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