当输入范围是字符串时,为什么我的组合框宏不起作用?

时间:2018-10-23 17:32:03

标签: excel vba excel-vba combobox

当我在Excel工作表组合框中选择不同的项目时,我希望运行不同的宏。当输入范围是整数(请参见下面的VBA代码)时,此方法效果很好。

Sub Hide_Charts_Combobox()
'
' Hide_Charts_Combobox
'
    Dim X As ControlFormat
    Set X = ActiveSheet.Shapes("Drop Down 95").ControlFormat
    If X = 1 Then
    Hide_Matrix
    ElseIf X = 2 Then
    Hide_Radar
    ElseIf X = 3 Then
    Hide_Goal_Ranks
    ElseIf X = 4 Then
    Hide_Goal_Ranks_bd
    ElseIf X = 5 Then
    Hide_KPI_Values
    ElseIf X = 6 Then
    Hide_Goal_Ratio
    ElseIf X = 7 Then
    Hide_KPI_Ratio
    ElseIf X = 8 Then
    Hide_Unitized_Ratio
    End If
'
End Sub

但是,我不希望组合框的输入范围是数字;我想要某些单词。当我用字符串替换输入时,宏根本不会运行(也不会出现错误)。这是我要使用的实际代码(当前不起作用):

Sub Hide_Charts_Combobox()
'
' Hide_Charts_Combobox
'
    Dim X As ControlFormat
    Set X = ActiveSheet.Shapes("Drop Down 95").ControlFormat
    If X = Matrix Then
    Hide_Matrix
    ElseIf X = Radar Then
    Hide_Radar
    ElseIf X = Goal Ranks Then
    Hide_Goal_Ranks
    ElseIf X = Goal Breakdown Then
    Hide_Goal_Ranks_bd
    ElseIf X = KPI Values Then
    Hide_KPI_Values
    ElseIf X = Goal Ratios Then
    Hide_Goal_Ratio
    ElseIf X = KPI Ratios Then
    Hide_KPI_Ratio
    ElseIf X = Unitized Ratios Then
    Hide_Unitized_Ratio
    End If
'
End Sub

我怀疑这与Dim X被定义为不能容纳字符串的ControlFormat有关,但是我不确定。我应该怎么做才能使其正常工作?

3 个答案:

答案 0 :(得分:4)

替换:

 If X = Matrix Then

使用

 If X = "Matrix" Then

答案 1 :(得分:3)

我真的很讨厌在Gary总结得很好的情况下添加一个新答案,但是只是为了增加可读性而添加另一个选项,Select Case在这里很好用。

Select Case X
Case "Matrix"
    Hide_Matrix
Case "Radar"
    Hide_Radar
Case "Goal Ranks"
    Hide_Goal_Ranks
Case "Goal Breakdown"
    Hide_Goal_Ranks_bd
Case "KPI Values"
    Hide_KPI_Values
Case "Goal Ratios"
    Hide_Goal_Ratio
Case "KPI Ratios"
    Hide_KPI_Ratio
Case "Unitized Ratios"
    Hide_Unitized_Ratio
End Select

Select Case在可读性方面非常有效,因为您正在比较相同变量,在这里您可以通过查看每个变量都引用x的情况来快速收集。 / p>

If...Then语句中,您必须逐行阅读,从而使您阅读更多,并且出错的机会也增加。

答案 2 :(得分:3)

您可以使用Application.Run方法,并使用从下拉输入范围(从ControlFormat ListFillRange属性获得)中选择的选定子名称供其选择的单元格(从ControlFormat ListIndex属性获得):

Sub Hide_Charts_Combobox()
    Dim X As ControlFormat
    Set X = ActiveSheet.Shapes("Drop Down 95").ControlFormat

    Application.Run "Hide_" & Range(X.ListFillRange).Offset(X.ListIndex - 1).Resize(1).Value
End Sub