/ / ¿Es posible aplicar un filtro a una lista desplegable de validación de datos? - excel, vba, excel-vba

¿Es posible aplicar un filtro a una lista desplegable de validación de datos? - excel, vba, excel-vba

Tengo una lista desplegable en una que muestra unabiblioteca de partes consolidadas de otra hoja de trabajo. Esta hoja de trabajo se actualizará constantemente hasta que podamos obtener una base de datos en funcionamiento, por lo que la forma en que funciona la lista de partes está más o menos grabada en piedra.

La biblioteca de piezas se compró utilizando una consulta y se ve así: enter image description here

He concatenado algunos de los datos para formar una tabla denominada `ProjectTab y se ve así: enter image description here

La tabla nombrada forma una lista detallada de validación de datos que se ve así: enter image description here

Para que la hoja de trabajo se llene automáticamente, acorté la salida de la lista de validación de datos para que solo se imprima el Part Index que se ve así:

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

El seguimiento IF declaración me permite averiguar qué tipo de producto es la pieza =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",""))))))))),"") Que produce la siguiente columna: enter image description here

Me gustaría usar algo similar al anterior IF declaración para filtrar la lista desplegable para seleccionar las partes, es decir, yo preseleccione el Assembly Type a través de un filtro en la parte superior de la hoja de trabajo que a su vez filtra el Part List lista desplegable para el tipo respectivo.

es posible? Si es así, ¿cómo podría hacer esto?

Gracias,

Dan

Respuestas

1 para la respuesta № 1

Respuesta actualizada

He escrito un ejemplo de VBA que creo que funcionará para ti. Puedes descargar una muestra aquí, pero si lo prefiere y para los lectores futuros, puede crear su propia hoja de trabajo en función de mi ejemplo a continuación.

Para este ejemplo, querrá configurar su libro de trabajo de la siguiente manera.

Primera hoja

Segunda hoja

Tercera hoja

Copie y pegue esto en el código de la hoja de trabajo "Ejemplo".

    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

Cuando cambia el Filtro de ensamblaje y el Worksheet_Change incendios de eventos, el código genera primero las partesLista basada en el Filtro de conjunto, luego se restablece y crea un nuevo filtro de Validación empezando en B4 y terminando en la última fila con datos en la Columna A. Puede ajustar esto según sea necesario, o incluso codificar un rango si lo prefiere.

Espero que esto ayude y avíseme si tiene problemas para modificar esto para su uso.