无论过滤器如何,始终包括某些单元格:VBAsolution

Always include certain cells regardless of filter: VBAsolution

我有一个 table,它有 5 个部分的行(工作周的每一天都有 1 个)。每行header是一个工作人员的名字-大约有15个人,所以一共15*5行。散布着标题为 "Monday" "Tuesday" 等的行。列 header 称为 "Name"

下面是搜索框的代码:

 Sub ScheduleSearch()
    'PURPOSE: Filter Data by Staff Name

Dim myButton As OptionButton
Dim MyVal As Long
Dim ButtonName As String
Dim sht As Worksheet
Dim myField As Long
Dim DataRange As Range
Dim mySearch As Variant

'Load Sheet into A Variable
  Set sht = ActiveSheet

'Unfilter Data (if necessary)
  On Error Resume Next
    sht.ShowAllData
  On Error GoTo 0

'Filtered Data Range (include column heading cells)
  Set DataRange = sht.ListObjects("Schedule").Range 'Table

'Retrieve User's Search Input
  mySearch = sht.Shapes("WireSearch").TextFrame.Characters.Text 'Control Form


'Loop Through Option Buttons
  For Each myButton In ActiveSheet.OptionButtons
      If myButton.Value = 1 Then
        ButtonName = myButton.Text
        Exit For
      End If
  Next myButton

'Determine Filter Field
  On Error GoTo HeadingNotFound
    myField = Application.WorksheetFunction.Match(ButtonName, DataRange.Rows(1), 0)
  On Error GoTo 0

'Filter Data
  DataRange.AutoFilter _
    Field:=myField, _
    Criteria1:="=*" & mySearch & "*", _
    Operator:=xlAnd

'Clear Search Field
  sht.Shapes("WireSearch").TextFrame.Characters.Text = "" 'Control Form
  'sht.OLEObjects("UserSearch").Object.Text = "" 'ActiveX Control
  'sht.Range("A1").Value = "" 'Cell Input

Exit Sub

'ERROR HANDLERS
HeadingNotFound:
  MsgBox "The column heading [" & ButtonName & "] was not found in cells " & DataRange.Rows(1).Address & ". " & _
    vbNewLine & "Please check for possible typos.", vbCritical, "Header Name Not Found!"

End Sub

Sub ClearScheduleFilter()
'
' ClearScheduleFilter Macro
'

'
    ActiveSheet.ListObjects("Schedule").Range.AutoFilter Field:=1
End Sub

现在,当我搜索 Person A 时,过滤器工作正常并按 Person A 过滤列 "Name"。

但是-我希望标题为 "Monday" "Tuesday" "Wednesday" "Thursday" 和 "Friday" 的单元格也自动包含在此无论用户搜索什么都进行过滤。

有代码吗?

更新:以下代码过滤天和周行,但它不过滤 mySearch 值。知道为什么吗?

'Filter Data
   DataRange.AutoFilter _
   Field:=myField, _
   Criteria1:=Array("MONDAY:", "TUESDAY:", "WEDNESDAY:", "THURSDAY:", "FRIDAY:", "WEEK:", " & mySearch & "), _
   Operator:=xlFilterValues

对于名称字段,使用数组列表来设置包含一周中所有日期和人员的过滤器。

基本的shell是这样的:

Selection.AutoFilter 1, Array("MONDAY", "TUESDAY" , "WEDNESDAY" , "A"), xlFilterValues

对于您提供的代码,这应该有效:

 DataRange.AutoFilter _
    Field:=myField, _
    Criteria1:= Array("MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"," & mySearch & ")", _
    Operator:=xlFilterValues