Código vba.. Error no se puede obtener la propiedad List cuando intento eliminar un item de un lisbox

Quisiera por favor me ayudaran tengo un UserForm con dos ListBox (Llamémoslos Listbox1, Lisbox2). Al Listbox1 se cargan los datos desde una hoja de excel, necesito que al hacer dobleclick sobre un dato se pase al otro listbox "Listbox2" y que ese dato se elimine del Listbox1, y repetir lo mismo pero del listbox2 al listbox1... El código me presenta problema en la línea donde voy a eliminar el dato del listbox1... Este es el error que me aparece y señala la línea a continuación

posicion = NombresList.ListIndex
NombresList. RemoveItem EquipoList. List(posicion, 0)

NombresList sería mi ListBox1, EquipoList sería ListBox2

He buscado y no sé si depronto el error tenga que ver con como cargo los datos al listbox, que lo hago con .rowsource, si es así no sabria como arreglarlo

Worksheets("Mecathlon1").Select
Crear.NombresList.RowSource = Sheets("Mecathlon1").Range("A2:A" & Sheets("Mecathlon1").Range("A500").End(xlUp).Row).Address

Este sería el código completo

Private Sub EquipoList_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    posicion = EquipoList.ListIndex
    NombresList.AddItem EquipoList.List(posicion, 0)
    EquipoList.RemoveItem NombresList.List(posicion, 0)
End Sub
Private Sub NombresList_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    posicion = NombresList.ListIndex
    EquipoList.AddItem NombresList.List(posicion, 0)
    NombresList.RemoveItem EquipoList.List(posicion, 0)
End Sub
Private Sub UserForm_Initialize()
    Worksheets("Mecathlon1").Select
    Crear.NombresList.RowSource = Sheets("Mecathlon1").Range("A2:A" & Sheets("Mecathlon1").Range("A500").End(xlUp).Row).Address
End Sub

El error que me sale es el siguiente

Espero me puedan ayudar y si es posible también me gustaría saber cómo limitar los items que entran al listbox2, me gustaría que solo se pudiera pasar 5 items

2 Respuestas

Respuesta
1

Es correcto, no puedes borrar con RemoveItem si cargaste con Rowsource, para borrar con RemoveItem, debes cargar con el método AddItem, por ejemplo:

Private Sub EquipoList_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    posicion = EquipoList.ListIndex
    If posicion = -1 Then Exit Sub
    NombresList.AddItem EquipoList.List(posicion, 0)
    EquipoList.RemoveItem posicion
End Sub
'
Private Sub NombresList_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    posicion = NombresList.ListIndex
    If posicion = -1 Then Exit Sub
    EquipoList.AddItem NombresList.List(posicion, 0)
    NombresList.RemoveItem posicion
End Sub
'
Private Sub UserForm_Initialize()
    Set h1 = Worksheets("Mecathlon1")
    'cambiar rowsouce por el método .AddItem
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        NombresList.AddItem h1.Cells(i, "A").Value
    Next
End Sub

Muchas gracias por tu respuesta

¿Por otro lado de pronto no tienes conocimiento acerca de limitar la cantidad de datos en el listbox?

¿Quieres poner un límite para cargar en el listbox?

¿En cuál listbox?

Tienes que ir contando el número de datos en el listbox y cuando llegue a tu límite entonces no cargas el nuevo dato.

Por ejemplo, si solamente quieres cargar 10 datos en el listbox2:

Private Sub NombresList_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    posicion = NombresList.ListIndex
    If posicion = -1 Then Exit Sub
    If EquipoList.ListCount = 10 Then
        MsgBox "Se alcanzó el límite de 10 registros"
        Exit Sub
    End If
    EquipoList. AddItem NombresList. List(posicion, 0)
    NombresList. RemoveItem posicion
End Sub

[sal u dos

Respuesta
1

:)

Efectivamente: RowSource "te ata" los datos de un rango de celdas al listbox. Si quieres eliminar un dato tienes -entonces- que eliminarlo en la celda.

Por ello lo mejor será que cargues inicialmente tu listbox mediante List, o sea:

With Sheets("Mecathlon1")
  NombresList.List = .Range("A2:A" & .Range("A500").End(xlUp).Row).Value
End With

Saludos, Mario (Cacho) Rodríguez

:)

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas