Excel 如果另一个单元格的值为“0”,则将单元格范围格式化为未锁定;x";

Excel 如果另一个单元格的值为“0”,则将单元格范围格式化为未锁定;x";,excel,vba,Excel,Vba,我正在创建一个相当大的用户输入模板,我想使用一些VBA代码将某些单元格格式化为“未锁定” 例如,如果单元格H9=5,则将单元格M5:X5格式化为unlocked,并让此代码一直运行到用户输入工作表(大约有2000行,每行运行代码) 多谢各位 TM对于单行: Sub UnLockIt() If Range("H9").Value = 5 Then Range("H5:M5").Locked = False End If End Sub 2000行 Sub UnLo

我正在创建一个相当大的用户输入模板,我想使用一些VBA代码将某些单元格格式化为“未锁定”

例如,如果单元格H9=5,则将单元格M5:X5格式化为unlocked,并让此代码一直运行到用户输入工作表(大约有2000行,每行运行代码)

多谢各位 TM

对于单行:

Sub UnLockIt()
    If Range("H9").Value = 5 Then
        Range("H5:M5").Locked = False
    End If
End Sub
2000行

Sub UnLockIt()
    If Range("H9").Value = 5 Then
        Range("H5:M2004").Locked = False
    End If
End Sub

修改2004以满足您的需要。这假定已从工作表中删除了保护。

我会将其添加到
工作表事件中

  • 右键单击工作表选项卡
  • 查看。。。。代码
  • 复制并粘贴下面的代码
  • 更改单元格
    H5:H10
    将在
    M5:X10
    等上运行代码

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng1 As Range
    Dim rng2 As Range
    Set rng1 = Intersect(Target, Range("H:H"))
    If rng1 Is Nothing Then Exit Sub
    
    With Application
    .ScreenUpdating = False
    .EnableEvents = False
    End With
    
    For Each rng2 In rng1
         Cells(rng2.Row, 13).Resize(1, 12).Locked = False
    Next rng2
    
    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
    End Sub
    

    谢谢Gary的学生现在,我需要一行一行地申请这个表格。那么有什么可以做到这一点:如果H9=5,那么解锁J9:X9。然后向下移动到下一行,如果H10=5,解锁J10:X10。然后向下移动到下一行并重复,等等,通过第2000行我可以让VBA解锁范围内的第一行,但我无法将代码移动到下一行并重复。例如:如果H9=5,则解锁J9:X9。然后向下移动到下一行,如果H10=5,解锁J10:X10。然后向下移动到下一行,并在第2000行重复上述操作