如何在VBA中的Case语句中使条件动态化?

时间:2014-07-24 18:33:13

标签: excel vba excel-vba dynamic conditional

我正在使用以下代码:

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

宏与excel表上的下拉列表有关。

有没有办法根据单元格值建立条件?即如果下拉列表等于单元格A1而不是“Region1”。

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

2 个答案:

答案 0 :(得分:1)

您可以在案例陈述中引用工作表范围中的值。

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

对于更复杂的测试,您可以使用Select Case True来更灵活地测试是否符合条件。

此代码显示了一些不同的测试。

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

答案 1 :(得分:0)

我认为您只需要完全符合您的范围。
以下对我有用:

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

另请注意,必须在下拉中选择一些内容。