Problema con la Propiedad Multiselect de Listbox

Utilizo el siguiente código para activar la celda correspondiente a un dato filtrado que me aparece en una listbox:

Private Sub ListBox1_Click()
Range("a2").Activate
Cuenta = Me.ListBox1.ListCount
Set Rango = Range("A1").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

Esto me permite sobre lo seleccionado en mi listbox, borrar o editar los valores de las celdas correspondientes a ese registro.

El problema que tengo es que cuando cambio la propiedad Multiselect de la listbox de single a multi o extended, cuando selecciono un resultado que tengo en esa listbox y uso mis códigos para editar o eliminar registros, siempre me lo hace en la fila correspondiente a la celda A2, pero mientras mantengo el Multiselect en single me funciona perfecto y lo que yo seleccione en la listbox y modifique lo hace sobre la celda correspondiente a la selección.

¿Alguna pista?

Respuesta
1

Cuando cambias la propiedad a Multiselect el evento Click se desactiva. Ya que funcionalidad del multiselect es que puedas seleccionar varios registros a la vez.

Lo interesante es saber para qué quieres activar al propiedad Multiselect. ¿Necesitas seleccionar varios registros para eliminarlos o editarlos?, si es así, entonces te sugiero que pongas un CommandButton y ahí poner el código. El proceso sería, seleccionas los registros que vas a trabajar, después presionas el botón, pero dentro del For tienes que poner la actualización. Por ejemplo, si quieres eliminar todos los registros seleccionados sería así:

Private Sub CommandButton1_Click()
    Set rango = Range("A1").CurrentRegion
    For i = 0 To Me.ListBox1.ListCount - 1
        If Me.ListBox1.Selected(i) Then
            Range("A1").Activate
            valor = Me.ListBox1.List(i)
            rango.Find(What:=valor, lookat:=xlWhole, After:=ActiveCell).Activate
            Rows(ActiveCell.Row).Delete
        End If
    Next i
End Sub

Notas: Para eliminar los registros del listbox de esa forma, primero debes cargar el listbox con el método AddItem, ya que si los cargas con la propiedad RowSoure, la selección de registros se desactiva en cuanto  borras una línea de la hoja.

También para que se vea reflejado el cambio que hiciste en la hoja, en el listbox, entonces tienes que cargar nuevamente el listbox.


Si tienes dudas, dime qué es lo que pretendes al cambiar a multiselect.


Si quedó aclarada la duda, recuerda valorar la respuesta.

La necesidad de utilizar miltiselect es qie uno de loa eventos que utilizo es llevar datos de los items seleccionados a otra hoja. Lo que se me ocurre como solución practica es dividir el trabajo en dos formularios independientes, uno con un listbox que no tenga la propiedad multiselect y otro que la tenga.

Prueba con los dos formularios, avísame si necesitas algo más.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas