【发布时间】:2021-05-08 13:30:43
【问题描述】:
我创建了一个表,我只想按 33 列中的 4 列进行过滤。
我所做的是分配了 5 个单元格(CountryName、ClientName、ProjNo 和 Date(frmDate - ToDate))。在其中一个单元格中输入文本时,需要过滤表格,然后按一个按钮清除单元格和表格的过滤器。
我面临两个问题:
-
当我按下清除按钮时,只有单元格会被清除,而表格不会。
-
当我在国家名称中输入数据时,表格中给出的授予日期也被过滤了,我不知道为什么它也会被过滤。
注意:如果有更好的 VBA 代码通过输入这些单元格来过滤表格,也可以。
Sheet1 的屏幕截图(过滤单元格和表格):
模块(FilteringModule):
Option Explicit
Sub TableFill()
Dim CountryName, ClientName, ProjNo As String
Dim ToDate, FrDate As Date
Dim MaxAmount, MinAmount As Integer
Dim LastRow As Long
With Sheet1
LastRow = .Range("G99999").End(xlUp).Row
If LastRow < 7 Then LastRow = 7
If .Range("E7").Value = "Enter BV Country" Then CountryName = Empty Else: CountryName = .Range("E7").Value 'Country Name'
If .Range("E9").Value = "Enter Client Name" Then ClientName = Empty Else: ClientName = .Range("E9").Value 'Client Name'
If .Range("E11").Value = "Enter Proj No." Then ProjNo = Empty Else: ProjNo = .Range("E11").Value 'Proj Name'
If .Range("E15").Value = "From Date" Then FrDate = "1/1/1900" Else: FrDate = .Range("E15").Value 'Date from'
If .Range("E16").Value = "To Date" Then ToDate = "1/1/2030" Else: ToDate = .Range("E16").Value 'Date To'
.Range("G6:AN" & LastRow).Select
Selection.AutoFilter
With .Range("G6:AN" & LastRow)
If CountryName <> Empty Then .AutoFilter Field:=2, Criteria1:="=*" & CountryName & "*"
If ClientName <> Empty Then .AutoFilter Field:=3, Criteria1:="=*" & ClientName & "*"
If ProjNo <> Empty Then .AutoFilter Field:=5, Criteria1:="=*" & ProjNo & "*"
.AutoFilter Field:=7, Criteria1:=">=" & FrDate, Operator:=xlAnd, Criteria2:="<=" & ToDate
End With
End With
End Sub
Sub ClearFilter()
With Sheet1
.Range("B4").Value = True
.AutoFilterMode = False
.Range("E7").Value = "Enter BV Country"
.Range("E9").Value = "Enter Client Name"
.Range("E11").Value = "Enter Proj No."
.Range("E15").Value = "From Date"
.Range("E16").Value = "To Date"
.Range("B4").Value = False
End With
End Sub
Sheet1 代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E7,E9,E11,E15:E16")) Is Nothing And Range("B4").Value = False Then
TableFill
End If
End Sub
【问题讨论】:
-
如果可能的话,分享一个 xlsx 文件的链接
-
我不知道如何分享excel文件的链接,如果你知道,你能告诉我吗?如果有不清楚的地方,请告诉我,我会添加更多细节。
-
您可以将其上传到 OneDrive 或 GoogleDrive 并在 cmets 中复制此处的链接。很清楚,或者至少我认为,我要求链接只是为了复制它,而不必重新输入所有内容。
-
没问题,这里是你需要的链接:1drv.ms/x/s!Av2jQlwHZCT3gi7eMGYxrN9gLiNA?e=MWuX0v