如果单元格 A1:C1= "No" ,则该行中存在风险的所有单元格都将被阻止输入

  • 本文关键字:单元格 C1 A1 No 如果 存在 vba excel
  • 更新时间 :
  • 英文 :


有人知道如何阻止单元格输入(也将其灰显(,例如单元格 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

相关内容

最新更新