首页 > 解决方案 > 错误 1004,“范围”上的方法“锁定”失败:VBA if cell1="" Then cell2=x

问题描述

我正在创建应该从一个范围内获取值的宏,如果为空,则将单元格锁定在另一个范围内。我仍然收到错误 1004,“范围”上的方法“锁定”失败。

Sub function_one()
    Dim cell As Range
    For Each cell In Range("Table[[Column1]:[Column2]]")
        Dim cell2 As Range
        For Each cell2 In Range("Table2[[Column1]:[Column2]]")
            If cell.Value = "" Then
                cell2.Locked = True   
            End If
        Next cell2
    Next cell
End Sub

我错过了什么?

标签: excelvba

解决方案


您无法锁定锁定的单元格。

因此,要么先解锁它以确保,要么先检查它,然后仅在尚未锁定的情况下将其锁定。

要首先解锁,添加一行代码来执行此操作,您的原始代码变为:

Sub function_one()
    Dim cell As Range
    For Each cell In Range("Table[[Column1]:[Column2]]")
        Dim cell2 As Range
        For Each cell2 In Range("Table2[[Column1]:[Column2]]")
            If cell.Value = "" Then
                cell2.Locked = False   
                cell2.Locked = True   
            End If
        Next cell2
    Next cell
End Sub

或者,您可以检查是否已解锁,然后才将其锁定:

Sub function_one()
    Dim cell As Range
    For Each cell In Range("Table[[Column1]:[Column2]]")
        Dim cell2 As Range
        For Each cell2 In Range("Table2[[Column1]:[Column2]]")
            If cell.Value = "" Then
                If cell2.Locked <> True then cell2.Locked = True   
            End If
        Next cell2
    Next cell
End Sub

在这两个示例中,您的代码均未进行其他修改。我也会做一些不同的事情,包括Table[[Column1]:[Column2]]零件、嵌套循环等,但所有这些都可能超出您的问题范围。


推荐阅读