【问题标题】:Excel AutoFilter range set by combo boxes?由组合框设置的 Excel 自动筛选范围?
【发布时间】:2016-04-20 06:13:56
【问题描述】:

我目前正在制作一个工作表,该工作表旨在使用 http://peltiertech.com/excel/chartshowto/panelunevenscales.html 中详细介绍的后门技术显示单个参数在同一时间间隔内的变化。

基本上,我将其设置为模板,其中 5 列数据(行长不同)可以从第 12 行开始粘贴到 AF 列中。我要过滤的时间列在 A 列中我基本上想做到这一点,以便可以使用 2 个组合框(ComboBox1 和 ComboBox2)来设置时间上限和下限并过滤掉任何其他数据。我希望我可以把它变成一个动态图表,它将调整 x 轴的大小以仅显示选定的时间段。

我对使用 VBA 还是比较陌生,我做了很多搜索,我能找到的唯一一件似乎相关的是http://www.ozgrid.com/forum/showthread.php?t=54376 上回答的问题。我尝试了以下代码并不断收到错误:

Sub TimeFilter()

Crit1 = Format(ComboBox1, "0")

Crit2 = Format(ComboBox2, "0")

.AutoFilterMode = False

.Range("A12:L10000").AutoFilter

.Range("A12:L10000").AutoFilter Field:=1, Criteria:=">=" & crit1, Operator:=xlAnd, Criteria2:="<=" & crit2

End Sub

关于为什么它可能不起作用的任何想法?任何帮助或指导表示赞赏!

****编辑****

这是我正在使用的电子表格的更新完整代码,使用 TimeFilter 脚本我得到“运行时错误 '1004',范围类的 AutoFilter 方法失败”: **我过滤的时间间隔为 0.2 秒,格式为 MM:SS.X。

Sub CreateComboBoxes()

Dim Cell As Range
Dim sht As Worksheet

Set sht = ThisWorkbook.Worksheets("Sheet1")

    Set Cell = Range("I8")  
    With Cell
        sht.DropDowns.Add(.Left, .Top, .Width, .Height).Name = "ComboBox1"
    End With

    Set Cell = Range("K8")    
    With Cell
        sht.DropDowns.Add(.Left, .Top, .Width, .Height).Name = "ComboBox2"
    End With

End Sub

Sub TimeFilter()

Crit1 = Format(ComboBox1, "0")
Crit2 = Format(ComboBox2, "0")

Worksheets("Sheet1").AutoFilterMode = False
Worksheets("Sheet1").Range("A12:L10000").AutoFilter
Worksheets("Sheet1").Range("A12:L10000").AutoFilter Field:=1,Criteria1:=">=" & Crit1, Operator:=xlAnd, _
Criteria2:="<=" & Crit2

End Sub

【问题讨论】:

  • 如果您使用Option Explicit 并将Crit1Crit2 定义为特定的变量类型......也许DateDouble,那么您的过滤器应该可以工作,前提是A 列中的单元格采用Date/Time 格式。 This may help ...但有更好的东西...还有一个FilterByDate 选项,但我目前找不到任何参考。如果您录制宏,您将获得正确的代码。
  • 您需要限定您的对象。例如。 .AutoFilterMode = False 应该类似于 Worksheets("Sheet1").AutofilterMode = False
  • 你遇到了什么错误,我正在运行代码,除了输入是日期字符串“01/01/05”和“31/12/10”而不是 ComboBox1 和 -2分别。我表中的数据由今天日期和“01/01/01”之间的 300 行日期组成。代码运行没有问题,结果符合预期。旁注:我假设这只是一个 sn-p,With ...End With 不在此代码 sn-p 之外,出于测试目的,我已将其包括在内。
  • 感谢大家的快速回复。正如我所说,我对整个 VBA 游戏还是很陌生,虽然我在解释现有代码和遵循流程方面做得很好,但我还不太擅长编写自己的详细代码。我编辑了我的原始帖子以显示我用于此工作簿的完整代码,包括用于创建组合框的宏。 @SilentRevolution,如果这段代码应该有“With”和“End With”语句,你能指出它们应该放在哪里吗?
  • 另外,创建组合框的脚本应该与过滤器的脚本结合,还是分开?最后,该代码应该在整个工作簿的 VBA 存储库中使用还是在单个工作表代码中编码?抱歉所有问题,但我只是想确保我理解。

标签: excel filter combobox vba


【解决方案1】:

我首先声明这不是一个答案,而是对使用WithEnd With 语句的解释。评论部分不提供正确执行此操作所需的格式化工具

WithEnd With 语句让您无需反复输入相同的位。

    ThisWorkbook.Worksheets("Sheet1").UsedRange.Font.ColorIndex = 3
    ThisWorkbook.Worksheets("Sheet1").UsedRange.Font.Bold = True
    ThisWorkbook.Worksheets("Sheet1").UsedRange.Font.Size = 15
    ThisWorkbook.Worksheets("Sheet1").UsedRange.Font.Name = "Times new Roman"

也可以写成

    With ThisWorkbook.Worksheets("Sheet1").UsedRange.Font
        .ColorIndex = 3
        .Bold = True
        .Size = 15
        .Name = "Times new Roman"
    End With

你会注意到“。”在 with end with 语句之间的行前面,这意味着它应该被视为 With 语句设置的内容的延续。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多