提问者:小点点

即使单元格/范围值更改,宏仍在运行


我想从另一个范围(F2: F5)的下拉引用中选择一个范围(B2)。我的意思是,如果有一天我必须更改引用范围(F2: F5)中的数据,我不需要更改宏代码中的值。如果B2范围内的值等于列表范围F2: F5之一上的文本值,则宏将运行。

我想要这样的东西:

Private Sub Worksheet_Calculate(ByVal Target As Range)

    If Target.Address = "$B$2" Then
        If Range("B2").Value = Range("F3").Value Then
            Rows("10:20").EntireRow.Hidden = False
            Rows("11:21").EntireRow.Hidden = True
        ElseIf Range("B2").Value = Range("F4").Value Then
            Rows("10:20").EntireRow.Hidden = True
            Rows("11:21").EntireRow.Hidden = False
        ..............
        ..............
        ..............

        End If
    End If
End Sub

我如何以一种对VBA友好的方式重写这一逻辑?谢谢你的帮助


共3个答案

匿名用户

您需要使用工作表更改。。。这将在对工作表进行任何更改时激活。(将此代码放入工作表代码中)。首先检查以确保单元格是B2,然后检查以确保在参考单元格中找到B2的值。然后,它为每个可能的选项执行Select Case。

Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Target, Range("B2")) is Nothing Then
    Exit Sub
End If
Select Case Range("B2").Value
    Case Range("F2").Value
        'Do Something
    Case Range("F3").Value
        'Do Something
    Case Range("F4").Value
        'Do Something
    Case Range("F5").Value
        'Do Something
    Case Else
        Exit Sub
End Select
End Sub

匿名用户

Private Sub Worksheet_Change(ByVal Target As Range)

With Target
   If .Address = "$B$2" Then
     Application.EnableEvents = False
      Select Case .Value
         Case Range("F3").Value
             Rows("10:20").EntireRow.Hidden = False
             Rows("11:21").EntireRow.Hidden = True
         Case Range("F4").Value
             Rows("10:20").EntireRow.Hidden = True
             Rows("11:21").EntireRow.Hidden = False
      End Select
     Application.EnableEvents = True
   End If
End With

End Sub

匿名用户

为什么不使用Select case结构:

私人子Worksheet_Calculate(ByVal目标范围)

如果 Target.Address = “$B$2” 则

Select Case  Range("B2").Value 
    case Range("F3").Value 
       Rows("10:20").EntireRow.Hidden = False
       Rows("11:21").EntireRow.Hidden = True
    case Range("B2").Value = Range("F4").Value Then
       Rows("10:20").EntireRow.Hidden = True
       Rows("11:21").EntireRow.Hidden = False
..............
..............
..............

End Select

结束如果结束子