【问题标题】:Always include certain cells regardless of filter: VBAsolution无论过滤器如何,始终包含某些单元格:VBAsolution
【发布时间】:2016-07-11 15:39:59
【问题描述】:

我有一个包含 5 行部分的表格(一周中的每一天)。每行标题是一个工作人员的名字——大约有 15 人,所以总共 15*5 行。穿插的是标题为“星期一”“星期二”等的行。列标题称为“名称”

下面是搜索框的代码:

 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

现在,当我搜索人员 A 时,过滤器工作正常,并按人员 A 过滤“姓名”列。

但是 - 我希望标题为“星期一”“星期二”“星期三”“星期四”和“星期五”的单元格也自动包含在此过滤器中,无论用户搜索什么。 p>

有代码吗?

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

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

【问题讨论】:

  • 您能否提供一组数据样本(如果需要,可以进行模拟)。在这种情况下,我认为即使是屏幕截图就足够了,但是将数据嵌入问题中总是最好的,这样人们就可以复制/粘贴。
  • 嗨@ScottHoltzman,我附上了一张截图。正如您在图像左侧看到的那样,表格中有多个行部分。让我知道这是否足够 - 我不确定如何在问题中嵌入数据。屏幕顶部“员工过滤器”附近的文本框是用户输入人名的地方。
  • 使用高级过滤器。保持日期值静态并动态添加搜索条件。
  • @cyboashu 我是 VBA 的新手——如何编辑上面的代码以保持日期值不变?

标签: vba excel optimization filter tablefilter


【解决方案1】:

对于姓名字段,使用数组列表设置过滤器,包括一周中的所有天和人员。

一个基本的外壳是这样的:

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

对于您提供的代码,这应该可以工作:

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

【讨论】:

  • 您建议的代码的第 3 行给了我一个错误。 (标准 1 行)。它突出显示“:=”并显示“编译错误。预期:表达式”
  • 现在试试@SRag - 我有一个额外的"
  • 我用那种工作的代码编辑了我的原始帖子。但是现在它不包含过滤器中的“mysearch”值——即使代码包含它。如果您有任何建议,请告诉我
  • @SRag - 我几乎肯定你不能在数组中使用类似过滤器和精确过滤器的组合。使用 mySearch 的确切值或为其他过滤器添加 * ... *MONDAY:*
  • @ScottHoltzman- 我的错。当我在上面尝试您现有的建议时,它说存在语法错误并以红色突出显示所有 3 行。知道为什么吗?感谢您的所有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 2011-03-26
相关资源
最近更新 更多