/ / Ist es möglich, einen Filter auf eine Datenüberprüfungs-Dropdown-Liste anzuwenden? - Excel, VBA, Excel-VBA

Ist es möglich, einen Filter auf eine Datenüberprüfungs-Dropdown-Liste anzuwenden? - Excel, VBA, Excel-VBA

Ich habe eine Drop-Down-Liste auf einer, die ein zeigtkonsolidierte Teilebibliothek aus einem anderen Arbeitsblatt. Dieses Arbeitsblatt wird ständig aktualisiert, bis wir eine funktionierende Datenbank erhalten, so dass die Funktionsweise der Teileliste mehr oder weniger in Stein gemeißelt ist.

Die Teilebibliothek wird über eine Abfrage gekauft und sieht folgendermaßen aus: Bildbeschreibung hier eingeben

Ich habe einige der Daten zu einer benannten Tabelle `ProjectTab 'verkettet und sieht so aus: Bildbeschreibung hier eingeben

Die benannte Tabelle bildet eine detaillierte Datenüberprüfungsliste, die wie folgt aussieht: Bildbeschreibung hier eingeben

Damit das Arbeitsblatt automatisch gefüllt wird, habe ich die Ausgabe der Datenüberprüfungsliste gekürzt, um nur die Ausgabe auszugeben Part Index Das sieht so aus:

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next

Dim textVal As String
Dim strVal As String

strVal = Target.Value
If Target.Column = 2 Then
textVal = Left(strVal, 9)
Target.Value = textVal

End If
End Sub

Folgende IF Aussage erlaubt mir herauszufinden, welche Art von Produkt das Teil ist =IF(B2>0,IF(LEFT(D2,1)="1","Assembly",IF(LEFT(D2,1)="2","Sub-Assembly",IF(LEFT(D2,1)="3","Software",IF(LEFT(D2,1)="4","Hardware",IF(LEFT(D2,1)="5","Chemical",IF(LEFT(D2,1)="6","Spare",IF(LEFT(D2,1)="7","Spare",IF(LEFT(D2,1)="8","Document",IF(LEFT(D2,1)="9","Misc",""))))))))),"") Das erzeugt die folgende Spalte: Bildbeschreibung hier eingeben

Ich würde gerne etwas Ähnliches wie oben verwenden IF Anweisung, die Dropdown-Liste zu filtern, um die Teile auszuwählen, d. h. ich wähle die Assembly Type über einen Filter am oberen Rand des Arbeitsblattes, der seinerseits den Filter filtert Part List Dropdown-Liste zum jeweiligen Typ.

Ist das möglich? Wenn ja, wie könnte ich das tun?

Vielen Dank,

Dan

Antworten:

1 für die Antwort № 1

Aktualisierte Antwort

Ich habe ein VBA-Beispiel geschrieben, von dem ich denke, dass es für Sie funktionieren wird. Sie können ein Beispiel herunterladen Hier, aber wenn Sie bevorzugen und für zukünftige Leser, können Sie Ihr eigenes Arbeitsblatt basierend auf meinem Beispiel erstellen.

In diesem Beispiel möchten Sie Ihre Arbeitsmappe wie folgt einrichten.

Erstes Blatt

Zweites Blatt

Drittes Blatt

Kopieren Sie diese und fügen Sie sie in den Arbeitsblatt-Code "Beispiel" ein.

    Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim AssemblyFilter As Range, PartsDropDown As Range
Dim strList As String, strAssemblyFilter As String
Dim i As Long

Set AssemblyFilter = Range("B1") "Set this to the cell that has the Assembly Filter
strAssemblyFilter = AssemblyFilter.Value

If Not Intersect(Target, AssemblyFilter) Is Nothing Then "Only Run following code when Assembly Filter cell has changed
strList = ""
With Sheets("Parts Library")    "Sheet with Parts Library
For i = 1 To .Cells(Rows.Count, "A").End(xlUp).Row
If strAssemblyFilter = .Cells(i, "B").Value Then    "Compare Assembly Filter to values in Column "B"
strList = strList & "," & .Cells(i, "A").Value  "If filter matches, then append this to the data Validation List
End If
Next i
strList = Mid(strList, 2)   "Chop off leading comma
End With

"Apply Data Validation to this Range (starting at cell B4 and ending at the last row with data in column A)
Set PartsDropDown = Range("B4:B" & Cells(Rows.Count, "A").End(xlUp).Row)
Application.EnableEvents = False
With PartsDropDown.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=strList                  "Pass in Validation List created above
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Application.EnableEvents = True
End If
End Sub

Wenn Sie den Baugruppenfilter und die Worksheet_Change Ereignis wird ausgelöst, der Code generiert zuerst die TeileAuf der Grundlage des Assembly-Filters wird sie zurückgesetzt und erstellt einen neuen Validierungsfilter, der bei B4 beginnt und bei der letzten Zeile mit Daten in Spalte A endet. Sie können dies nach Bedarf anpassen oder sogar einen Bereich hart codieren, wenn dies bevorzugt wird.

Hoffe, dass dies hilft und lassen Sie mich wissen, wenn Sie irgendwelche Probleme haben, dies für Ihre Verwendung zu ändern.