Rango dinámico no permite cargar datos a listbox

Tengo este código para cargar datos al listbox desde un rango dinámico. SIn embargo, cuando el rango esta vacío me sale el error que impide cargar el formulario. (Esta claro que el siguiente código esta en el evento Initialize.

Sheets("LIST"). Activate
Range("A2").Select
Do While ActiveCell.Value <> ""
ListBox1.AddItem ActiveCell
i = ListBox1.ListCount - 1
ListBox1.List(i, 1) = ActiveCell.Offset(0, 1)
ListBox1.List(i, 2) = ActiveCell.Offset(0, 2)
ActiveCell.Offset(1, 0).Select
Loop

1 respuesta

Respuesta
2

Ya probé tu código con datos y sin datos; y no me envía error.

¿Qué mensaje de error te aparece?

¿Y en qué línea se detiene la macro?

Me sale "Error en el método "Range" de objeto Global. No me deja cargar el formulario donde se encuentra el Listbox.
El código esta en el evento initialize.

Ejecuta el formulario con F8 para que me digas en cuál línea se detiene, o cuál línea se pone en azul

Hola Dante.

He probado y tal como indicas, el código corre sin problemas.

Identifique que ese mensaje me sale por otro código.

No se si sea oportuno consultarlo aquí mismo o tengo que crear otra pregunta.
Igual ahí va:

Tengo varios combobox que se cargan en función a un rango dinámico. Para ello el código lo tengo en el evento initialize.

Este rango cuando esta vacío no me permite cargar el Formulario donde se encuentran los combobox. El rango dinámico esta renombrado con la función desref: Aquí pongo el código.

Private Sub UserForm_initialize()
Dim rango, celda As Range
Set rango = Range("Milista")
For Each celda In rango
    ComboBox1.AddItem celda.Value
    ComboBox2.AddItem celda.Value
Next celda
End Sub
******Esto es el codigo del Desref. Cuya etiqueta es "Milista". 
******Los datos esta en la hoja LIST.
=DESREF(LIST!$A$2, 0, 0, CONTARA(LIST!$A:$A)-1)

Gracias por tu valioso apoyo

Slds

El error es de la fórmula. No es error de la macro. Por lo tanto, podríamos pasar a la siguiente línea con la sentencia On Error Resume Next

Private Sub UserForm_initialize()
    Dim rango, celda As Range
    On Error Resume Next
    Set rango = Range("Milista")
    For Each celda In rango
        ComboBox1.AddItem celda.Value
        ComboBox2.AddItem celda.Value
    Next celda
    On Error GoTo 0
End Sub

'

La otra opción es que controles desde la macro la última fila de datos de la columna A, de la siguiente manera:

Private Sub UserForm_initialize()
    Set h1 = Sheets("List")
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        ComboBox1.AddItem h1.Cells(i, "A").Value
        ComboBox2.AddItem h1.Cells(i, "A").Value
    Next
End Sub

Te recomiendo utilizar la segunda opción, de esa forma tienes todo el control desde la macro.


Sal u dos

¡Gracias!

Dante eres más trome.

Había superado ese error con el controlador de errores. Pues considere que era suficiente.

SIn embargo acabo de ver tu respuesta y proponiendo la segunda opción (la primera también se me había ocurrido) y me parece genial; en el sentido integro de genialidad.

Muchas gracias nuevamente.

Un fuerte abrazo

Slds

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas