当我在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有关,但是我不确定。我应该怎么做才能使其正常工作?
答案 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