Hola.
Ingresé a este foro y encontré una macro para llenar un listbox con una matriz. Tomé la mcaro y la adapté a lo que tengo. En mi caso quiero hacer algo un poquito diferente. Aqui pongo la macro que hice:
Private Sub TextBox1_Change()
Dim valor As Variant
Dim Hoja As String
Dim Rangoconsulta As Range
Dim columna As String
'---------------------------
Dim X, i As Integer
Dim MatrizAuxiliar() As Variant
On Error Resume Next
LstDatos.Clear
valor = TextBox1.Value
Cells.Find(What:=valor, after:=ActiveCell, LookIn:=xlValues, lookat _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Select Case CmbOpcion.ListIndex
Case 0
Hoja = "OFICIOS ENVIADOS"
Set Rangoconsulta = Worksheets(Hoja).Range("a10:o1000")
columna = "A"
Case 1
Hoja = "OFICIOS DESPACHADOS"
Set Rangoconsulta = Worksheets(Hoja).Range("a10:o1000")
columna = "A"
Case 2
Hoja = "OFICIOS RECIBIDOS"
Set Rangoconsulta = Worksheets(Hoja).Range("a10:o1000")
columna = "A"
Case 3
Hoja = "MEMOS ENVIADOS"
Set Rangoconsulta = Worksheets(Hoja).Range("a10:o1000")
columna = "A"
Case 4
Hoja = "MEMOS DESPACHADOS"
Set Rangoconsulta = Worksheets(Hoja).Range("a2:o1000")
columna = "A"
Case 5
Hoja = "MEMOS RECIBIDOS"
Set Rangoconsulta = Worksheets(Hoja).Range("a10:o1000")
columna = "A"
End Select
busca = ActiveCell.Column
If CmbOpcion <> "" Then
' LstDatos.Clear
With Sheets(Hoja)
i = 1
X = 0
ReDim MatrizAuxiliar(0 To 14, 0 To X)
Do
nxt:
rw = .Range(.Cells(i, busca), .Cells(1000000, busca)).Find(valor, LookIn:=xlValues, lookat:=xlPart).Row
If rw = i Then
' LstDatos.Clear
LstDatos.List = Application.WorksheetFunction.Transpose(MatrizAuxiliar)
Application.ScreenUpdating = True
GoTo totales
End If
ReDim Preserve MatrizAuxiliar(0 To 14, 0 To X) 'redimensionamos con una columna más
MatrizAuxiliar(0, X) = .Cells(rw, 1)
MatrizAuxiliar(1, X) = .Cells(rw, 2)
MatrizAuxiliar(2, X) = .Cells(rw, 3)
MatrizAuxiliar(3, X) = .Cells(rw, 4)
MatrizAuxiliar(4, X) = .Cells(rw, 5)
MatrizAuxiliar(5, X) = .Cells(rw, 6)
MatrizAuxiliar(6, X) = .Cells(rw, 7)
MatrizAuxiliar(7, X) = .Cells(rw, 8)
MatrizAuxiliar(8, X) = .Cells(rw, 9)
MatrizAuxiliar(9, X) = .Cells(rw, 10)
MatrizAuxiliar(10, X) = .Cells(rw, 11)
MatrizAuxiliar(11, X) = .Cells(rw, 12)
MatrizAuxiliar(12, X) = .Cells(rw, 13)
MatrizAuxiliar(13, X) = .Cells(rw, 14)
MatrizAuxiliar(14, X) = .Cells(rw, 15)
X = X + 1
i = rw
GoTo nxt
Loop
End With
Else
LstDatos.Clear
End If
totales:
End Sub
como podrán ver lleno el listbox dependiendo de lo que escriba en el textbox en el evento change, es decir a medida que ponga una letra en el listbox aparecerán las coincidencias de lo que encuentre en la respectiva hoja que ha sido previamente escogida en un combobox.
Cuando escribo la primera letra me funciona perfectamente y el listbox se llena con todas las coincidencias, sin embargo a la segunda letra me sale este error en esta linea:
LstDatos.List = Application.WorksheetFunction.Transpose(MatrizAuxiliar)
"sale error de coincidencia de tipos"
Me di cuenta que aparentemente se sobrecarga el listbox, así que borro el listbox del formulario y lo vuelvo a crear y nuevamente me funciona con la primera letra, pero al escribir la segunda letra vuelve a pasar lo mismo.
Me podrían ayudar, cual es el problema, como lo soluciono (ya llevo varios días y no encuentro la solución).
Gracias.