Macro para colocar valor con listbox a datos con filtro

Tengo un formulario con un listbox, el cual(listbox) se carga con los datos de una hoja("Historial Ventas") filtrada, cada ves que yo le doy clic algún registro en listbox, me coloca un valor de un textbox del mismo formulario, mi problema es que no coloca ese valor al registro que selecciono. ¿Cómo puedo solucionar ese problemilla?

Este es el código que uso para pasar el valor del textbox.

indice = ListBox1.ListIndex

Cells(indice + 6, 29).Value = TextBox27.Value

1 respuesta

Respuesta
1

El problema es este, cuando filtras la información de la hoja y la cargas en un listbox, el listbox empieza la numeración desde 0, esto significa que cargas el primer registro filtrado en el listbox. Listindex 0, el segundo registro filtrado en el listbox. Listindex 1 y así sucesivamente. Pero creo que esto ya lo sabías, ahora, supongamos que tus datos empiezan en la fila 6, sin filtro la fila 6 se cargaría en el index 0, CON FILTRO, puede ser que la fila 15 se cargue en el index 0, por consiguiente no puedes saber cuál fila es la que se cargó en el index 0.
Ese es el problema, la soluciones pueden ser varias.
Opción 1, Si cargaste con Additem, Cuando cargues el listbox, en una columna adicional tendrás que cargar el número de fila, de esta forma cuando filtres, debes leer el valor que almacenaste en la columna adicional para saber a cuál fila corresponde ese registro seleccionado.
Opción2, Si los registros tienen una clave única, Cuando selecciones un registro del listbox deberás buscarlo con la clave única en la hoja para encontrar la fila.
Opción 3, Si cargas con ListBox1. RowSource = "A1:B5", tendrás que agregar una columna en tu hoja con el consecutivo de cada fila y entonces cargar así ListBox1.RowSource = "A1:C5"
Si quieres que te ayude a aplicar alguna de las opciones, envíame tu archivo.
Saludos. DAM

Si te sirven los tips, podrías finalizar la pregunta.

hola, el lixtbox lo cargo con este código:

Dim rango As Range, Datos Dim strultimacelda$, ingvuelta&, ingtotaldatos&
strultimacelda$ = Range("A6").End(xlDown).Address

For Each rango In ActiveSheet.Range("A7:" & strultimacelda$)
If rango.EntireRow.Hidden = False Then

ingtotaldatos& = ingtotaldatos& + 1

End If Next rango
ReDim Datos(ingtotaldatos&, 31)

lngvuelta& = 0
For Each rango In ActiveSheet.Range("A6:" & strultimacelda$)
If rango.EntireRow.Hidden = False Then

Datos(ingvuelta&, 0) = rango

Datos(lngvuelta&, 1) = rango.Offset(0, 1)

Datos(lngvuelta&, 2) = rango.Offset(0, 2)

Datos(lngvuelta&, 3) = rango.Offset(0, 3)

Datos(lngvuelta&, 4) = rango.Offset(0, 4)

Datos(lngvuelta&, 5) = rango.Offset(0, 5)

Datos(lngvuelta&, 6) = rango.Offset(0, 6)

Datos(lngvuelta&, 7) = rango.Offset(0, 7)

Datos(lngvuelta&, 8) = rango.Offset(0, 8)

Datos(lngvuelta&, 9) = rango.Offset(0, 9)

Datos(lngvuelta&, 10) = rango.Offset(0, 10)

Datos(lngvuelta&, 11) = rango.Offset(0, 11)

Datos(lngvuelta&, 12) = rango.Offset(0, 12)

Datos(lngvuelta&, 13) = rango.Offset(0, 13)

Datos(lngvuelta&, 14) = rango.Offset(0, 14)

Datos(lngvuelta&, 15) = rango.Offset(0, 15)

Datos(lngvuelta&, 16) = rango.Offset(0, 16)

Datos(lngvuelta&, 17) = rango.Offset(0, 17)

Datos(lngvuelta&, 18) = rango.Offset(0, 18)

Datos(lngvuelta&, 19) = rango.Offset(0, 19)

Datos(lngvuelta&, 20) = rango.Offset(0, 20)

Datos(lngvuelta&, 21) = rango.Offset(0, 21)

Datos(lngvuelta&, 22) = rango.Offset(0, 22)

Datos(lngvuelta&, 23) = rango.Offset(0, 23)

Datos(lngvuelta&, 24) = rango.Offset(0, 24)

Datos(lngvuelta&, 25) = rango.Offset(0, 25)

Datos(lngvuelta&, 26) = rango.Offset(0, 26)

Datos(lngvuelta&, 27) = rango.Offset(0, 27)

Datos(lngvuelta&, 28) = rango.Offset(0, 28)

Datos(lngvuelta&, 29) = rango.Offset(0, 29)

Datos(lngvuelta&, 30) = rango.Offset(0, 30)

Datos(lngvuelta&, 31) = rango.Offset(0, 31)

lngvuelta& = lngvuelta& + 1 End If

En todo caso, si me gustaría que revisaras el archivo...

Bueno creo que te faltó la línea donde cargas en el listbox.

Pero envíame tu archivo y te regreso una propuesta para que la revises.

Dime cómo se llama tu formulario, cómo se llama tu listbox, cómo se llama la hoja donde están tus datos y dime si tienen una clave única.

mi correo [email protected]

Saludos. DAM

Listo, ya envíe el fichero

Te envié el archivo con la macro corregida

Saludos. DAM
Si es lo que necesitas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas