我想选择一个范围(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友好的方式重写此逻辑?谢谢你的帮助
答案 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
结束如果 结束子