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

时间:2014-12-06 16:45:21

标签: excel vba excel-vba

我想选择一个范围(B2),该范围来自另一个范围的下拉参考(来自F2:F5的来源)。我的意思是如果有一天我必须更改参考范围(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 个答案:

答案 0 :(得分:1)

您需要使用Worksheet_Change ...这会激活对工作表的任何更改。 (将此代码放入SHEET的代码中)。首先,它检查以确保单元格是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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

为什么不使用Select case结构:

Private Sub Worksheet_Calculate(ByVal Target As Range)

如果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

结束如果 结束子