A veces no funciona bien la búsqueda en listbox

A quien me pueda ayudar nuevamente, gracias

Tengo un listbox que se carga con datos desde una hoja excel,

La rutina se inicia dándole doble click en un rango de la hoja excel, lo que genera que se cargue el listbox con los datos, Lo que necesito es que además se posicione en el listbox, en el mismo item al cual yo le dí doble click, en el excel, pero no siempre lo hace, a veces funciona bien durante 5 o 6 oportunidades y a la siguiente se posiciona en otro lugar del listbox, ¿qué variable no estaré usando bien?

Hoja excel ejemplo, mi intención es que al dar doble click en por ej (LOCALS), se abra el listbox que carga los datos y se posicione en el ítem (LOCALS)

Rutina para abrir el listbox

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, cancel As Boolean)

Dim rng As Range
Set rng = Range("E2:E500")

If Union(Target, rng).Address = rng.Address Then

Pedidos_last.TextBox1 = ActiveCell.Offset(0, -3) 'envío este dato para luego ubicarlo en el  listbox es la columna B, donde hay datos númericos no ordenados 
Pedidos_last.Show
Else
End If

End Sub

Rutina del listbox para cargarse

Private Sub userForm_activate()

Dim i
Dim a
Dim hoja

i = 3 'primer fila desde donde empieza a buscar
a = 0 'es para indiciar en el listbox en que fila va
hoja = "taller ricardo" 'es la hoja donde va a buscar los datos
Pedidos_last.ListBox1.Clear

While Sheets(hoja).Cells(i, 1).Value <> ""
Pedidos_last.ListBox1.AddItem (Sheets(hoja).Cells(i, 2).Value) 

Pedidos_last.ListBox1.List(a, 1) = (Sheets(hoja).Cells(i, 7).Value)
Pedidos_last.ListBox1.List(a, 2) = (Sheets(hoja).Cells(i, 3).Value)
Pedidos_last.ListBox1.List(a, 3) = (Sheets(hoja).Cells(i, 5).Value)
Pedidos_last.ListBox1.List(a, 4) = (Sheets(hoja).Cells(i, 6).Value)
Pedidos_last.ListBox1.List(a, 5) = (Sheets(hoja).Cells(i, 16).Value)
Pedidos_last.ListBox1.List(a, 6) = (Sheets(hoja).Cells(i, 13).Value)
Pedidos_last.ListBox1.List(a, 7) = (Sheets(hoja).Cells(i, 14).Value)
Pedidos_last.ListBox1.List(a, 8) = (Sheets(hoja).Cells(i, 9).Value)
Pedidos_last.ListBox1.List(a, 9) = (Sheets(hoja).Cells(i, 10).Value)
a = a + 1
i = i + 1
Wend

'Hasta aquí todo bien se cargan los datos en el listbox 1

'ahora quiero posicionarme en el item mismo que dí doble click en el excel cuyo dato estaría en el textbox1 que sería numérico no ordenado y que debe hallarlo en la primer columna del listbox

Dim filx As Integer
Dim j
If TextBox1 = "" Then Exit Sub
For j = 0 To ListBox1.ListCount - 1
If InStr(1, ListBox1.List(j, 0), TextBox1.Value) > 0 Then
filx = j
Exit For
End If
Next j

ListBox1.ListIndex = j

End Sub

Como dije anteriormente, muchas veces se ubica donde lo deseo, pero en determinadas ocasiones no se ubica y no sé donde puede estar la falla

Respuesta
1

Te anexo la macro actualizada:

Private Sub userForm_activate()
'Act.Por.Dante Amor
    i = 3                   'primer fila desde donde empieza a buscar
    hoja = "taller ricardo" 'es la hoja donde va a buscar los datos
    ListBox1. Clear
    '
    While Sheets(hoja).Cells(i, 1).Value <> ""
        ListBox1. AddItem Sheets(hoja).Cells(i, 2)
        ListBox1. List(ListBox1.ListCount - 1, 1) = Sheets(hoja).Cells(i, 7)
        ListBox1. List(ListBox1.ListCount - 1, 2) = Sheets(hoja).Cells(i, 3)
        ListBox1. List(ListBox1.ListCount - 1, 3) = Sheets(hoja).Cells(i, 5)
        ListBox1. List(ListBox1.ListCount - 1, 4) = Sheets(hoja).Cells(i, 6)
        ListBox1. List(ListBox1.ListCount - 1, 5) = Sheets(hoja). Cells(i, 16)
        ListBox1. List(ListBox1.ListCount - 1, 6) = Sheets(hoja). Cells(i, 13)
        ListBox1. List(ListBox1.ListCount - 1, 7) = Sheets(hoja). Cells(i, 14)
        ListBox1. List(ListBox1.ListCount - 1, 8) = Sheets(hoja).Cells(i, 9)
        ListBox1. List(ListBox1.ListCount - 1, 9) = Sheets(hoja). Cells(i, 10)
        i = i + 1
    Wend
    '
    If ActiveCell.Row > 2 And ActiveCell.Row < i Then
        ListBox1.ListIndex = ActiveCell.Row - 3
    End If
End Sub

Nota: En VBA, no es necesario que declares las variables, todas son declaradas como variant, sólo en algunos casos es necesario.

Saludos. Dante Amor

Recuerda valorar la respuesta.

Hola Dante, sigo con el mismo problema, hay ocasiones en las que no abre el listbox en el item seleccionado,  hay forma de que te mande el archivo? para ver si puedes encontrar la falla?

¿Le cambiaste algo a la macro que te envié?

Envíame tu archivo con el formulario y la macro.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “saruzza” y el título de esta pregunta.

Hola Dante, te acabo de enviar el archivo. desde ya muchas gracias!

Cuando le das doble click cerca de donde se va a abrir el formulario, el segundo click del mouse cae sobre el listbox, entonces el registro que habías seleccionado en la macro, cambia por el que seleccionaste "accidentalmente" con el segundo click del mouse.

¿! Cómo se soluciona?!

Te propongo 2 alternativas:

1. Cambia el evento de la hoja, en lugar de tener el evento BeforeDoubleClick, pon el evento SelectionChange, con este evento solamente tienes que dar un click en la celda y se abre el formulario.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Set rng = Range("E3:E500")
    If Union(Target, rng).Address = rng.Address Then
        Pedidos_last.TextBox4 = "Cte " & ActiveCell.Offset(0, -2) & " " & ActiveCell
        Pedidos_last.Show
    End If
End Sub

2. La segunda alternativa es que se abra el formulario fuera del alcance del rango de la columna "E", para esto tienes que cambiar la propiedad StartUpPosition del formulario a "Manual":

En el formulario pon el siguiente código:

Private Sub UserForm_Initialize()
    Pedidos_last.Left = Columns("F").Left + 20
    Pedidos_last.Top = Rows(3).Top + 20
End Sub

La segunda alternativa no se me hace tan práctica, pero funciona.


Si encuentro otra alternativa para que no seleccionar "accidentalmente" un registro en el listbox te la comento.


Saludos. Dante Amor

Recuerda valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas