2017-12-19 2 views
0

Ich verwende derzeit die folgenden VBA, aber ich muss etwas darauf aufbauen.Automatisierung von Excel-Autofilter mit VBA

Option Explicit 
Sub AutoFilterData() 
Dim wsData As Worksheet 

Set wsData = ThisWorkbook.Worksheets("Master") 
With wsData 
    On Error Resume Next 
    '//Reset Autofilter 
    .ShowAllData 
    ThisWorkbook.Worksheets("Master").Range("A1:BZ1").AutoFilter 2, 
    ThisWorkbook.Worksheets("Summary-LT BD").Range("H1") 
End With 
'//Close my objects 
Set wsData = Nothing 
End Sub 

Wenn ich den obigen Code ausführen, gibt der Filter Null ergibt, obwohl die Zelle H1 bestückt ist und passt Werte in der zweiten Spalte in der Registerkarte Master. Zusätzlich zur Verwendung von H1 als Teil des Filters muss ich in der Lage sein, zusätzliche Autofilter-Kriterien von der Registerkarte "Summary-LT BD" unter Verwendung der Zellen Q4-Q11 hinzuzufügen, wenn ein Wert ausgewählt wurde, If und von Q4-Q11 = " "Dann müssen alle Werte für dieses Kriterium angezeigt werden. Ich werde schließlich dieses Makro hinzufügen, um eine Schaltfläche klicken Sie in Excel als Detailansicht einiger Tabellenwerte.

TIA für jede Hilfe!

Jesse

+2

Als Erstes starten Sie, indem Sie 'On Error Resume Next' entfernen und versuchen Sie es erneut mit Ihrem Code. Wenn nichts passiert, erhalten Sie möglicherweise einen Fehler. – dwirony

Antwort

0

Wie darüber informiert:

Option Explicit 
Sub AutoFilterData() 
Dim wsData As Worksheet 

Set wsData = ThisWorkbook.Worksheets("Master") 

wsData.Range("$A$1:$BZ$1").AutoFilter Field:=2, Criteria1:=ThisWorkbook.Worksheets("Summary-LT BD").Range("H1") 

'if you want to use multiple criteria to filter then you would have to use something like below (using an array of values to filter): 
'wsData.Range("$A$1:$BZ$1").AutoFilter Field:=2, Criteria1:=Array("A", "B", "C", "D", "E"), Operator:=xlFilterValues 
End Sub 

UPDATE

So können Sie mehrere Felder/Spalten zu filtern, mit mehreren Kriterien wählen:

Option Explicit 
Sub AutoFilterData() 
Dim wsData As Worksheet 
Dim LastRow As Long 
Dim H1Value As String 

Set wsData = ThisWorkbook.Worksheets("Master") 
LastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row 
'wsData.Range("$A$1:$BZ$" & LastRow).AutoFilter field:=2, Criteria1:=ThisWorkbook.Worksheets("Summary-LT BD").Range("H1") 

'Or to filter multiple fields/columns then the code below will do it 
H1Value = Worksheets("Summary-LT BD").Range("H1").Value 
With wsData 
.AutoFilterMode = False 
.Range("A1:BZ" & LastRow).AutoFilter 
.Range("A1:BZ" & LastRow).AutoFilter field:=2, Criteria1:=H1Value 
.Range("A1:BZ" & LastRow).AutoFilter field:=23, Criteria1:="Inside LT" 
.Range("A1:BZ" & LastRow).AutoFilter field:=75, Criteria1:="Other" 
End With 
End Sub 
+0

Ich habe versucht, was Sie hatten, aber noch kein Glück. Wenn ich mehrere Kriterien verwende, müsste es aus verschiedenen Spalten stammen. Hier ist ein Beispiel, obwohl ich weiß, dass es nicht richtig eingerichtet ist. Ich denke, du wirst bekommen, was ich versuche zu tun. wsData.Range ("$ A $ 1: $ BZ $ 1") AutoFilterfeld: = Array (2,23,75) Criteria1: = Array (ThisWorkbook.Worksheets ("Zusammenfassung-LT BD"). Bereich ("H1") , "Inside LT", "Andere"), Operator: = xlFilterValues ​​ – Jesse

+0

Meine Antwort wurde mit etwas aktualisiert, mit dem Sie das tun können, was Sie erwarten. Sie können nicht einfach ein Array für die Anzahl der zu filternden Felder hinzufügen. ..Bitte überprüfe meine Antwort und lass mich wissen, wie es dir geht ... – Xabier

1

Also habe ich irgendwie was gemacht ng zusammen. Ich bin ziemlich nah dran. So funktionieren die ersten 3 Autofilter großartig. Mein Problem ist jetzt, dass wenn ich einen Wert in einem der q-Bereiche leer lasse (was wäre, wenn ich keinen Filter für diesen Wert haben möchte), bekomme ich eine leere Ausgabe. Ich gehe davon aus, dass ich irgendwie eine Art von "," "" "Art von Aussage dort irgendwie brauche.

Option Explicit 
    Sub NeedIn() 
    Dim wsData As Worksheet 

    Set wsData = ThisWorkbook.Worksheets("Master") 

    With wsData 
     On Error Resume Next 
     '//Reset Autofilter 
     .ShowAllData 
     wsData.Range("A1:BZ1").AutoFilter 23, "Inside LT" 
     wsData.Range("A1:BZ1").AutoFilter 75, "Need Date Moved In" 
     wsData.Range("A1:BZ1").AutoFilter 2, ThisWorkbook.Worksheets("Summary-LT BD").Range("H1").Value 
     wsData.Range("A1:BZ1").AutoFilter 4, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q4").Value 
     wsData.Range("A1:BZ1").AutoFilter 3, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q5").Value 
     wsData.Range("A1:BZ1").AutoFilter 5, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q6").Value 
     wsData.Range("A1:BZ1").AutoFilter 6, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q7").Value 
     wsData.Range("A1:BZ1").AutoFilter 7, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q8").Value 
     wsData.Range("A1:BZ1").AutoFilter 8, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q9").Value 
     wsData.Range("A1:BZ1").AutoFilter 9, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q10").Value 
     wsData.Range("A1:BZ1").AutoFilter 10, ThisWorkbook.Worksheets("Summary-LT BD").Range("Q11").Value 

     Sheets("Master").Select 
     Cells.Select 
     Selection.Copy 
     Workbooks.Add 
     ActiveSheet.Paste 
     Cells.Select 
     Cells.EntireColumn.AutoFit 

    End With 
    Set wsData = ThisWorkbook.Worksheets("Master") 

    With wsData 
     On Error Resume Next 
     '//Reset Autofilter 
     .ShowAllData 
    '//Close my objects 
    End With 
    Set wsData = Nothing 
    End Sub