【问题标题】:VBA Filter Based on Checked Boxes基于复选框的 VBA 过滤器
【发布时间】:2018-09-26 07:30:47
【问题描述】:

我想知道是否有人可以帮助我。我创建了一个用户表单,可以更改 Excel 工作表上的过滤器。我的列包含 1-3 的优先级。当表单启动时,我可以选择将报告打印为 PDF,但我希望允许用户在打印为 PDF 之前根据优先级应用/过滤结果。我有三个要在过滤器代码中使用的复选框(见下图)。这是我卡住的地方,我不确定如何将代码输入到 Criteria 部分,因此当用户选中优先级 1 框时,它会在打印之前过滤掉该部分。如果值为真,我将分配与优先级关联的数值。然后在应用过滤器时将该数字用作值“标准”。有一个更好的方法吗?

ActiveSheet.Range("$W$7:$AG$4501").AutoFilter Field:=6, Criteria:= "What Do i Put Here?" 

【问题讨论】:

  • 是否有一列填有优先级?如果是这样,请过滤该值。您是否查找过有关如何使用Range.Autofilter 的任何答案?有很多解决方案
  • 是的,该列填充了优先级(上图更新)。我能够找到有关 Range.Autofilter 的信息,但我很难找到有关如何将复选框的值链接到自动过滤器所需条件的信息。如果用户选中优先级 1 框并单击确定,我希望自动过滤器将真值关联为范围自动过滤条件中的 1 以及检查优先级的任意组合。
  • 这无关紧要,但这真的需要依赖ActiveSheet吗?
  • 这很好,不,它不需要是活动表。我可以定义工作表适用于。

标签: excel vba checkbox userform


【解决方案1】:

您只需要检查复选框的名称并将它们与正确的标准对齐即可。请注意,您的条件就是您要过滤的值,此处为1, 2, or 3

对于您的测试语句,您也可以只说If CheckBox1 Then,这将返回If True Then,其中True 对应于一个复选框。

我在下面的代码中明确地写出来了,所以很清楚。我猜这可能需要在单击某种提交按钮时调用。


If CheckBox1 = True Then
    ActiveSheet.Range("$W$7:$AG$4501").AutoFilter Field:=6, Criteria:= 1
ElseIf CheckBox2 = True Then
    ActiveSheet.Range("$W$7:$AG$4501").AutoFilter Field:=6, Criteria:= 2
ElseIf CheckBox3 = True Then
    ActiveSheet.Range("$W$7:$AG$4501").AutoFilter Field:=6, Criteria:= 3
End If

【讨论】:

  • 是的,我有一个按钮可以调用此代码。上面的代码只允许应用一个优先级。如果他们的用户选择 1 和 3,则仅应用优先级 1。我上面有一个类似的代码和所有的组合,并试图清理它。
猜你喜欢
  • 2019-02-17
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
相关资源
最近更新 更多