【问题标题】:VBA - Combobox - AutoFilter method of Range class failedVBA - 组合框 - Range 类的 AutoFilter 方法失败
【发布时间】:2016-02-11 16:24:32
【问题描述】:

我的组合框 (ActiveX) 有下面的代码,用于根据值过滤表中的数据。

代码执行良好并过滤表,但随后由于范围类的自动过滤方法失败错误而崩溃

我真的不明白为什么?

组合框是一个 ActiveX 组合框并链接到单元格 F5,列表范围是一个动态范围,根据表格中的内容而变化

代码:

Sub ComboBox1_Change()

If Range("F5").Value = "" Then
ActiveSheet.ListObjects("Table3").Range.AutoFilter

Else

With ActiveSheet

.ListObjects("Table3").Range.AutoFilter Field:=3, _
 Criteria1:=Range("F5").Value

End With
End If
End Sub

【问题讨论】:

  • 我想找出这个错误的真正原因,因为on error resume next 只是一种忽略错误的方法,而不是避免错误。 (1) 可以表示 Table3 的范围,例如A2:C1000。 (2) 组合框是否与Table3在同一张表上?
  • 组合框位于单元格 F5 中,列表对象位于单元格 C8:H152 的同一工作表中。
  • C8:H152 不包括 F5...

标签: vba excel combobox


【解决方案1】:

试试

Sub ComboBox1_Change()
with activesheet
    If .Range("F5").Value = "" Then
        .ListObjects("Table3").Range.AutoFilter

    Else
        .ListObjects("Table3").Range.AutoFilter Field:=3, _
 Criteria1:=Range("F5").Value
    end if  

End With
End Sub

【讨论】:

  • 试过了 - 不幸的是没有什么不同
  • 可能 F5 单元格与您的列表对象在同一行
  • 不,列表对象在第 8 行
【解决方案2】:

想出了一个解决方案:

不确定到底是什么原因造成的,但我只是在下面放了一个错误简历:

Sub ComboBox1_Change()

With ActiveSheet

If Range("F5").Value = "" Then
ActiveSheet.ListObjects("Table3").Range.AutoFilter

 Else
 On Error Resume Next
 .ListObjects("Table3").Range.AutoFilter Field:=3, _
 Criteria1:=Range("F5").Value

End If
End With

End Sub

【讨论】:

  • 我怀疑这是一个解决方案,因为如果您忽略错误,该语句实际上不会执行。您的列表现在是否仅限于您在组合框中选择的值?
  • 是的,表格过滤到组合框中的任何值,如果我清除组合框,过滤器就会清除。所以它似乎按预期工作......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多