Activar la celda del registro elegido VBA

Tengo un ligero problema y espero puedan ayudarme.

Tengo un formulario en el cual hay un textbox, en el ingreso un numero de parte para buscarlo en una lista de cerca de 700 registros, todo bien hasta ahí.

El problema esta en que hay registros repetidos y cuando se despliegan esos repetido, quiero elegir alguno de los registros, entonces solo selecciona el primer registro de los 4 o 5 que haya repetidos.

Este es el código

Private Sub ListBox1_Click()
Range("a6").Activate
Cuenta = Me.ListBox1.ListCount
Set Rango = Range("A5").CurrentRegion
For i = 0 To Cuenta - 1
    If Me.ListBox1.Selected(i) Then
        Valor = Me.ListBox1.List(i)
        Rango.Find(What:=Valor, LookAt:=xlWhole, After:=ActiveCell).Activate
    End If
Next i
End Sub

Y quiero que seleccione el registro que sea apesar de que este repetido.

2 respuestas

Respuesta
1

Tenemos dentro del form un botón, un listbox (multiselect) y un textbox.

Por un lado tenemos el evento INITIALIZE que carga el listbox con doce valores de la columna A de la hoja1

Private Sub UserForm_Initialize()
ListBox1.RowSource = "hoja1!a1:a12"
End Sub

Y por otro lado tenemos la macro que funciona al pulsar el botón:

Private Sub CommandButton1_Click()
For x = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(x) = True Then
lista = lista & "," & ListBox1.List(x, 0)
End If
Next
lista = Mid(lista, 2, Len(lista) - 1)
TextBox1.Value = lista
End Sub

Haz la prueba: cuando se abra el form selecciona varios elementos del listbox y pulsa el botón.

No olvides finalizar la consulta

Respuesta
1

Para saber cuál registro seleccionaste en el listbox, tienes que resolverlo desde el momento en que cargas los registros en el listbox.

Te explico, suponiendo que en la hoja "refacciones", en la columna A tienes los nombres de las partes y en las otras columnas otros datos, por ejemplo:


Entonces, si en el textbox yo escribo "puerta", en el listbox voy a cargar los registros 5, 6 y 7, ¿de acuerdo?

Lo anterior sería así:

Private Sub CommandButton1_Click()
'Por.Dante Amor
    ListBox1.Clear
    If TextBox1 = "" Then Exit Sub
    '
    ListBox1.ColumnCount = 2
    Set h = Sheets("refacciones")
    For i = 2 To h.Range("A" & Rows.Count).End(xlUp).Row
        If h.Cells(i, "A") = TextBox1 Then
            ListBox1.AddItem h.Cells(i, "A")
            ListBox1.List(ListBox1.ListCount - 1, 1) = h.Cells(i, "B")
            ListBox1.List(ListBox1.ListCount - 1, 2) = i
        End If
    Next
End Sub

Le pongo la propiedad ListBox1.ColumnCount = 2, pero en realidad voy a cargar 3 columnas, en la columna 0 pongo la Parte, en la columna 1 la marca Marca y en la columna 2 el número de fila.

En el listbox voy a ver esto:

Pero en realidad dentro del listbox tengo esto

Pero no quiero que se vea la columna con el número de fila, por eso la propiedad columncount = 2.


Entonces, ya tengo cargado el listbox con los datos que necesito.

Ahora, para saber el número de fila al seleccionar un registro del listbox, solamente necesitas una línea de código:

Private Sub ListBox1_Click()
'Por.Dante Amor
    fila = Val(ListBox1.List(ListBox1.ListIndex, 2))
End Sub

Si quieres obtener un dato de la hoja, por ejemplo, quiero poner la marca en el textbox2, según el registro seleccionado del listbox:

Private Sub ListBox1_Click()
'Por.Dante Amor
    fila = Val(ListBox1.List(ListBox1.ListIndex, 2))
    Set h = Sheets("refacciones")
    TextBox2 = h.Cells(fila, "B")
End Sub

Yo sé que los registros están en la hoja "refacciones", que la marca está en la columna "B", entonces no es necesario seleccionar la hoja, ni tampoco activar la celda. En el userform se vería así:

En el ejemplo, selecciono puerta-vw, internamente en el listbox, tengo la fila 6, entonces obtengo de la hoja "refacciones", la fila 6, columna "B" y presento el dato en el textbox2.


Todo es un ejemplo para que lo apliques en tu código.

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas