我想从另一个范围(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友好的方式重写这一逻辑?谢谢你的帮助
您需要使用工作表更改
。。。这将在对工作表进行任何更改时激活。(将此代码放入工作表代码中)。首先检查以确保单元格是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
结束如果结束子