如何使VBA中的Case Statement中的条件dynamic化?

目前我正在使用以下代码:

Sub DropDown1_Change() With ThisWorkbook.Sheets("Dashboard").Shapes("Drop Down 1").ControlFormat Select Case .List(.Value) Case "Region1": Region0_Select Case "Region2": Region1_Select Case "Region3": Region2_Select End Select End With End Sub 

这个macros涉及到excel表格的下拉菜单。

有没有办法将条件基于单元格值? 即如果下拉等于单元格A1而不是“区域1”。

我尝试使用范围(“A1”)的东西。价值无济于事。

您可以引用Case Statement中的工作表范围中的值。

 Sub DropDown1_Change() Dim sDropDownVal As String With ThisWorkbook.Sheets("Dashboard") sDropDownVal = .Shapes("Drop Down 1").ControlFormat.List(.Value) Select Case sDropDownVal Case .Range("A1").Value Call Region0_Select Case .Range("B1").Value, .Range("B3").Value, .Range("B5").Value Call Region1_Select Case (.Range("C1").Value + 2) * 10 Call Region2_Select Case Else '---your code if no conditions met End Select End With End Sub 

对于更复杂的testing,您可以使用Select Case True来更灵活地testing是否满足条件。

这段代码显示了一些不同的testing。

 Sub DropDown1_Change2() Dim sDropDownVal As String With ThisWorkbook.Sheets("Dashboard") sDropDownVal = .Shapes("Drop Down 1").ControlFormat.List(.Value) Select Case True Case sDropDownVal = .Range("A1").Value Call Region0_Select Case sDropDownVal >= .Range("B1").Value Call Region1_Select '--can evaluate more complex tests also Case sDropDownVal = .Range("C1").Value And _ .Range("D1").Value = "Yes" Call Region2_Select Case Else '---your code to execute if no conditions met End Select End With End Sub 

我认为你只需要完全限定你的范围。
下面为我​​工作:

 Sub DropDown1_Change() Dim ws As Worksheet: Set ws = Thisworkbook.Sheets("Dashboard") With ws.Shapes("Drop Down 1").ControlFormat Select Case .List(.Value) Case ws.Range("A1").Value: Region0_Select Case ws.Range("A2").Value: Region1_Select Case ws.Range("A3").Value: Region2_Select End Select End With End Sub 

或者你可以这样明确:

 Case Is = ws.Range("A1").Value: Region0_Select 

另外请注意,在下拉菜单中必须select一些东西。