Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 当输入范围是字符串时,为什么combobox宏不起作用?_Excel_Vba_Combobox - Fatal编程技术网

Excel 当输入范围是字符串时,为什么combobox宏不起作用?

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

我希望在“我的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
我怀疑这与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中获得下拉选择的值,以便与字符串进行比较。你怎么知道的?