在Excel2010中,我在Y列上创建了这些项目的行和特征上的X项目表。其中一个功能是 应用程序区域 ,我想根据应用程序区域类型过滤项目。难点是桌面上的项目有multiple application areas,所以我不能使用excel的简单过滤功能。
我想出了一个想法,让 n 复选框(本例中为3)并将每个复选框的输出分配给不同的单元格,例如: A10,B10,C10。我将相关值分配给额外列中每个项目的 OR 函数,例如:因此,例如,当我检查应用程序区域 A 时,项目1和3在 F 列中有 TRUE ,我可以使用此列通过在自动过滤器功能中选择 TRUE 来过滤表格。有关更好的理解,请参阅picture。
问题是在更改复选框的状态后,自动过滤器功能不会自动刷新。每次我必须在 data 功能区中重新应用过滤器。在线我发现这段VBA代码在活动表中有自动刷新功能。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 8 Then
ActiveSheet.AutoFilter.ApplyFilter
End If
End Sub
现在,如果我主动转到 F 列中的一个单元格并将单元格编辑为 TRUE 或<,则此代码可以正常工作并重新应用过滤器em> FALSE 手动。如果我使用复选框更改 F 中的单元格值,则自动刷新不起作用。
通过键入值并按 ENTER 并使用复选框更改单元格值有什么区别?
顺便说一句,复选框是FORM CONTROLS类型,而不是ACTIVEX。
任何帮助都将受到高度赞赏。 谢谢!
答案 0 :(得分:0)
以下将Worksheet_Change
作出反应,就好像您手动更改了任何表格单元格一样
假设:
您的表单复选框名称为&#34; A&#34;,&#34; B&#34;和&#34; C&#34;
分别为他们分配名为&#34; A_Click&#34;,&#34; B_Click&#34;,&#34; C_Click&#34;
它们与表格
表名是&#34;功能&#34;
然后将以下代码放在任何模块中:
Option Explicit
Sub A_Click()
SetOrs
End Sub
Sub B_Click()
SetOrs
End Sub
Sub C_Click()
SetOrs
End Sub
Sub SetOrs()
Dim i As Long
Dim A As Boolean, B As Boolean, C As Boolean
Dim appAreaStrng As String
With ActiveSheet
A = .Shapes("A").ControlFormat.Value = xlOn '<~~ get CheckBox "A" value
B = .Shapes("B").ControlFormat.Value = xlOn '<~~ get CheckBox "B" value
C = .Shapes("C").ControlFormat.Value = xlOn '<~~ get CheckBox "C" value
With .ListObjects("Features")
For i = 1 To .ListRows.Count
appAreaStrng = .DataBodyRange.Cells(i, .ListColumns("App Area").Index) '<~~ get current row "App Area" value
.DataBodyRange.Cells(i, .ListColumns("OR").Index) = (A And InStr(appAreaStrng, "A") > 0) Or (B And InStr(appAreaStrng, "B") > 0) Or (C And InStr(appAreaStrng, "C") > 0)
Next i
End With
End With
End Sub