有人知道如何阻止单元格输入(也将其灰显(,例如单元格 A1:C1 = "否",那么行的其余部分直到 F1 变灰并阻止输入?我希望在 VBA 中做到这一点,但如果还有其他更简单的方法,请告诉我!谢谢!
迪迪
只是为了展示一种不同的方法:
将其放在工作表代码选项卡中:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not (Intersect(Target, Me.Range("D1:F1")) Is Nothing) And Me.Evaluate("AND(LOWER(A1:C1)=""no"")") Then Me.Range("A1").Select
End Sub
为了将它们灰显出来,最好是条件格式:
Range: =$D$1:$F$1
Formula: =AND(LOWER($A$1:$C$1)="no")
- 使用条件格式可以根据需要更改单元格,而无需更改VBA代码(这也将更快(
- VBA部分本身,如果A1:C1为"否",则仅将所选单元格设置为A1,并且选择的范围还包括D1:F1的任何单元格
- 如果您希望
LOWER
区分大小写,可以跳过
它
唯一的缺点是:如果 A1:C1 为"否",您仍然可以将范围粘贴到单元格(而不是直接粘贴 D1:F1 中的任何一个(,其中还包括锁定的单元格。
最大的优点是:这也适用于共享工作簿(因为无需锁定/解锁工作表(
编辑
如果需要保护细胞,那么这样的事情就可以了:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Boolean
a = Me.Evaluate("AND(LOWER(A1:C1)=""no"")")
If a <> Me.Range("D1").Locked Then
Me.Unprotect
Me.Range("D1:F1").Locked = a
Me.Protect
End If
End Sub
如
注释中所述,希望使用以下子项使用工作簿更改事件
Sub test()
If Worksheets("Sheet1").Range("A1").Value = "no" And Worksheets("Sheet1").Range("B1").Value = "no" And Worksheets("Sheet1").Range("C1").Value = "no" Then
Worksheets("Sheet1").Range("D1:F1").Interior.Color = RGB(220, 220, 220)
Worksheets("Sheet1").Range("D1:F1").Locked = True
Worksheets("Sheet1").Protect
End If
End Sub