【问题标题】:Why doesn't my combobox macro work when the input range is a string?当输入范围是字符串时,为什么我的组合框宏不起作用?
【发布时间】:2020-04-13 13:35:49
【问题描述】:

我希望在我的 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 有关,但我不确定。我应该怎么做才能让它发挥作用?

【问题讨论】:

  • 如果将Option Explicit添加到模块的顶部,它会在运行时看到未声明的变量(没有Dim行的变量)导致错误。这有助于捕捉诸如拼写错误或忘记字符串的引号等内容。

标签: excel vba combobox


【解决方案1】:

替换:

 If X = Matrix Then

 If X = "Matrix" Then

等等

【讨论】:

  • 我无法从Set X = ActiveSheet.Shapes("Drop Down 95").ControlFormat 获取下拉选定值,以便与字符串进行比较。你是怎么做到的?
【解决方案2】:

当 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 语句中,您必须逐行阅读,从而使您阅读更多内容并增加出错的机会。

【讨论】:

    【解决方案3】:

    您可以使用Application.Run 方法并使用从下拉输入范围(从ControlFormat ListFillRange 属性中获得)选择的单元格(从ControlFormat @ 获得)提供给它987654325@财产):

    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
    

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 2021-04-14
      相关资源
      最近更新 更多