:)
Hola! Susania
Suponiendo que tienes en el UserForm:
- El TextBox1
- El CommandButton1, y
- El ListBox1
Entonces lo que sigue te puede ayudar:
Private Sub CommandButton1_Click()
Dim Rng As Range, ws As Worksheet
Dim mWidth
'La tercera columna del rango de datos contiene los Nº de documentos:
Const col_Documento% = 3
If TextBox1 = "" Then Exit Sub
Application.ScreenUpdating = False
'Especifico el rango de datos (hoja y celdas):
Set Rng = Sheets("Datos").Range("F1:P148")
With ActiveSheet
'Si la hoja auxiliar no existe entonces la creo:
On Error Resume Next
Set ws = Sheets("Auxiliar")
If Err.Number Then
Set ws = Worksheets.Add(After:=Worksheets(Worksheets.Count))
ws.Name = "Auxiliar"
End If
On Error GoTo 0
.Activate
End With
'Apronto el Listbox1:
mWidth = Array(50, 40, 70, 50, 40, 65, 30, 45, 35, 40, 45)
With ListBox1
.RowSource = ""
.ListIndex = -1
.Value = ""
.ColumnCount = 1 + UBound(mWidth)
.ColumnHeads = True
.ColumnWidths = Join(mWidth, ";")
'Ancho del Listbox1:
.Width = 15 + Application.Sum(mWidth)
.IntegralHeight = True
DoEvents
'Ancho del UserForm:
Me.Width = 10 + 2 * .Left + .Width
End With
'Aplico el filtro avanzado:
With ws
.[b1] = "CachoR"
.[b1].CurrentRegion.Delete xlShiftUp
.[a1] = Rng.Cells(1, col_Documento)
.[a2] = TextBox1
Rng.AdvancedFilter 2, .[a1:a2], .[c1], False
With .[c1].CurrentRegion
If .Rows.Count > 1 Then
ListBox1.RowSource = .Offset(1).Resize(.Rows.Count - 1).Address(external:=True)
End If
End With
End With
Application.ScreenUpdating = True
End Sub
Nota que el código requiere de tres especificaciones:
- Hoja y rango de datos incluyendo la fila de encabezados.
- Columna del rango de datos en la que buscar el documento.
- Y una hoja a la que he llamado "Auxiliar" en la que se vuelca el resultado del filtro avanzado. Si tal hoja no existe el código la crea.
- Adicionalmente te muestro como formatear al ListBox y -hasta- darle ancho al propio UserForm para que se visualicen todas las columnas.
¿Te sirve la idea?...
Saludos, Mario (Cacho) R.
:)