【发布时间】:2019-06-02 08:15:09
【问题描述】:
我想要做的是使用一个多复选框表单来根据我的“项目”工作表中的表格设置过滤器值。我已经能够成功地对个人进行这项工作,但是我需要做的是采用当前 33 个复选框的任意组合来过滤符合所有选定条件的行。以下是我目前拥有的,并且它一直在范围内。我的范围运行列 K:AQ,其值等于 11 到 43,如下所示。
Private Sub FilterButton_Click()
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet
Set ws = wb.Sheets("Projects")
Dim fld As Long
For fld = 11 To 43
Next
If frmSearch.CheckBox1 = True = True Or _
frmSearch.CheckBox2 = True Or frmSearch.CheckBox3 = True Or _
frmSearch.CheckBox4 = True Or frmSearch.CheckBox5 = True Or _
frmSearch.CheckBox6 = True Or frmSearch.CheckBox7 = True Or _
frmSearch.CheckBox8 = True Or frmSearch.CheckBox9 = True Or _
frmSearch.CheckBox10 = True Or frmSearch.CheckBox11 = True Or _
frmSearch.CheckBox12 = True Or frmSearch.CheckBox13 = True Or _
frmSearch.CheckBox14 = True Or frmSearch.CheckBox15 = True Or _
frmSearch.CheckBox16 = True Or frmSearch.CheckBox17 = True Or _
frmSearch.CheckBox18 = True Or frmSearch.CheckBox19 = True Or _
frmSearch.CheckBox20 = True Or frmSearch.CheckBox21 = True Or _
frmSearch.CheckBox22 = True Or frmSearch.CheckBox23 = True Or _
frmSearch.CheckBox24 = True Or frmSearch.CheckBox25 = True Or _
frmSearch.CheckBox26 = True Or frmSearch.CheckBox27 = True Or _
frmSearch.CheckBox28 = True Or frmSearch.CheckBox29 = True Or _
frmSearch.CheckBox30 = True Or frmSearch.CheckBox31 = True Or _
frmSearch.CheckBox32 = True Or frmSearch.CheckBox33 = True Then
ws.Range("K2:AQ1500").AutoFilter Field:="fld", Criteria1:="<>"
End If
End Sub
【问题讨论】:
-
去掉
fld周围的引号,它是一个变量而不是一个实际的字符串。字段编号也是相对的,例如K 将是您的自动过滤器范围中的第 1 列。 -
这消除了错误,但是它没有通过过滤器返回任何值。我看看我能不能让它工作。谢谢!
-
好的,例如,如果我将字段值修改为 12,它将选择表中的第 12 列。我将我的 fld 变量改回 11 到 43 但是现在我再次收到范围错误,尽管它只是我更改的字段。如果我能找到解决方案,我会继续努力并更新。如果您有任何想法,请告诉我。谢谢
-
您的范围是 33 列宽,因此您的循环需要从 1 运行到 33。
-
当我以这种方式设置它时,我可以毫无错误地运行,但是它什么也没选择。
标签: excel vba checkbox autofilter