Excel 当输入范围是字符串时,为什么combobox宏不起作用?
我希望在“我的Excel工作表”组合框中选择不同的项目时运行不同的宏。当输入范围为整数时,此操作非常有效。请参见下面的VBA代码Excel 当输入范围是字符串时,为什么combobox宏不起作用?,excel,vba,combobox,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 ElseI
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
我怀疑这与dimx被定义为不能保存字符串的ControlFormat有关,但我不确定。我应该怎么做才能使它工作?替换:
If X = Matrix Then
与
等。替换:
If X = Matrix Then
与
等等。当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的情况,可以快速收集数据
在If…Then语句中,你必须逐行阅读,这样会使你读得更多,也会增加出错的机会。我真的不喜欢在Gary总结得很好时添加新答案,但为了提高可读性,只需添加另一个选项,选择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的情况,可以快速收集数据
在If…Then语句中,你必须逐行阅读,这样会使您阅读更多内容,也会增加出错的机会。您可以使用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
您可以使用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
如果将Option Explicit添加到模块的顶部,当它看到未声明的变量而没有暗线时,将在运行时导致错误。这有助于捕捉诸如键入错误或忘记字符串的引号等内容。如果在模块顶部添加Option Explicit,当它看到未声明的变量而没有暗线时,将在运行时导致错误。这有助于捕捉诸如打字错误或忘记字符串的引号等内容。我无法从Set X=ActiveSheet.ShapesDrop down 95.ControlFormat中获取下拉选择值,以便与字符串进行比较。您是怎么做到的?我无法从Set X=ActiveSheet.ShapesDrop down 95.ControlFormat中获得下拉选择的值,以便与字符串进行比较。你怎么知道的?