2016-07-11 13 views
0

Ich habe eine Tabelle, die 5 Abschnitte der Zeilen (1 für jeden Tag der Arbeitswoche) hat. Jeder Zeilenkopf ist der Name eines Mitarbeiters - es gibt ungefähr 15 Personen, also insgesamt 15 * 5 Zeilen. Streut sind Reihen des Titels „Montag“ „Dienstag“ usw. Die Spaltenüberschrift wird als „Name“Immer bestimmte Zellen unabhängig von Filter einschließen: VBAsolution

Unten ist der Code für das Suchfeld:

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 

Gerade jetzt, wenn ich für Person A zu suchen, der Filter funktioniert einwandfrei und filtert die Spalte "Name" nach Person A.

Allerdings möchte ich die Zellen mit dem Titel "Montag" "Dienstag" "Mittwoch" "Donnerstag" und "Freitag" automatisch auch in diesem enthalten sein Filter, egal was der Benutzer sucht.

Gibt es einen Code dafür?

AKTUALISIERUNG: Der folgende Code filtert die Tage- und Wochenzeile, filtert jedoch nicht den Wert für mySearch. Irgendeine Idee warum?

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

können Sie einen Probensatz der Daten zur Verfügung stellen (Mock-up, wenn erforderlich). In diesem Fall denke ich, dass sogar ein Screenshot ausreichen würde, aber das Einbetten der Daten in die Frage ist immer am besten, damit Leute kopieren/einfügen können. –

+0

Hallo @ScottHoltzman, ich habe einen Screenshot aufgenommen. Wie Sie auf der linken Seite des Bildes sehen können, gibt es mehrere Abschnitte von Zeilen in der Tabelle. Lassen Sie mich wissen, ob das ausreicht - ich bin mir nicht sicher, wie ich Daten in die Frage einbetten soll. Das Textfeld oben auf dem Bildschirm in der Nähe von "Staff Member Filter" ist der Ort, an dem der Benutzer den Namen einer Person eingibt. – SRag

+0

Verwenden Sie den erweiterten Filter. Halten Sie die Tageswerte statisch und fügen Sie die Suchkriterien beim Fliegen hinzu. – cyboashu

Antwort

0

Verwenden Sie für das Namensfeld eine Array-Liste, um den Filter festzulegen, der alle Wochentage und die Person enthält.

Eine grundlegende Shell ist dies:

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

Für den Code, den Sie zur Verfügung gestellt haben diese funktionieren sollte:

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

Die dritte Zeile Ihres vorgeschlagenen Codes gibt mir einen Fehler. (Die Zeile mit den Kriterien1). Es markiert das ": =" und sagt "Kompilierfehler. Erwartet: Ausdruck" – SRag

+0

Jetzt versuchen @SRag - Ich hatte eine zusätzliche '" ' –

+0

Ich bearbeitet meine ursprüngliche Post mit dem Code, der Art von funktioniert. Aber jetzt tut es nicht Fügen Sie den Wert "mysearch" in den Filter ein, auch wenn der Code diesen enthält. Lassen Sie mich wissen, wenn Sie Vorschläge haben. – SRag