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:
Ich habe einige der Daten zu einer benannten Tabelle `ProjectTab 'verkettet und sieht so aus:
Die benannte Tabelle bildet eine detaillierte Datenüberprüfungsliste, die wie folgt aussieht:
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:
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 № 1Aktualisierte 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.
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.