¿Cómo cargar datos a combobox considerando espacios en blanco? (DAM)

Hey que tal Dante Amor!

Te comento que tengo problemas para cargar datos completos al combobox, ya que mi rango de celdas tiene varias celdas vacías y la macro se detiene al encontrar la primera en blanco, ¿cómo le hago para que ignore las celdas vacías y continué cargando el resto de los datos?.

Gracias por tu invaluable labor.

Jhonatan G.

1 respuesta

Respuesta
1

Tengo que revisar el código. Probablemente tienes un código que va saltando de celda en celda.

Lo más conveniente es leer celda por celda pero sin seleccionar la celda. Por ejemplo:

Private Sub UserForm_Activate()
'Por.DAM
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
        If Cells(i, "A") <> "" Then
            ComboBox1.AddItem Cells(i, "A")
        End If
    Next
End Sub

Con el ciclo anterior lees las celdas y pregunta si la celda es diferente de "" (vacío) entonces que haga la carga.


Si quieres cargar valores únicos del combo.

Private Sub UserForm_Activate()
'Por.Dante Amor
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
        If Cells(i, "A") <> "" Then
            agregar ComboBox1, Cells(i, "A")
        End If
    Next
End Sub
Sub agregar(combo As ComboBox, dato As String)
'por.Dante Amor agrega los item únicos y en orden alfabético
    For i = 0 To combo.ListCount - 1
        Select Case StrComp(combo.List(i), dato, vbTextCompare)
            Case 0: Exit Sub 'ya existe en el combo y ya no lo agrega
            Case 1: combo.AddItem dato, i: Exit Sub 'Es menor, lo agrega antes del comparado
        End Select
    Next
    combo.AddItem dato 'Es mayor lo agrega al final
End Sub

Recomendación, si seleccionas la celda, NO utilices el Do While o el Do Until, es más lento , ya que haces 3 operaciones, comparar el while, sumar uno al contador y seleccionar la siguiente celda.

Con el For Next, solamente haces una operación, ya que la estructura está en memoria.

Los ciclos Do, claro que son útiles, pero en otras circunstancias, por ejemplo, para repetir las búsquedas.

Saludos. Dante Amor

Hey qué tal!

Muy buenos días, Dante amor!

He probado la primera macro en un combobox y efectivamente es más rápido y lee todas la celdas. La segunda macro para cargar registros únicos, no sé como adaptarla, pues dentro de evento userform_activate ya no me deja colocar otro procedimiento .

No sé como aplicar o adaptar ambas macros en mi form el cual tiene 11 combobox con datos de diferentes columnas, o quizás deba aplicar ambos procedimiento de manera individual por cada combo.

¿Me puedes orientar por favor?

Mil gracias, que tengas un excelente día!

Son 2 opciones diferentes para hacer la carga, como no veo los datos y no sé qué es lo que quieres cargar en el combo, te puse las 2 opciones. Pero si ya te funcionó la primera opción ya no utilices la segunda.

Bien, entonces nada más para despejar mis dudas; ¿Debo escribir el código de la primera macro por cada combobox que tengo en el form?. Es decir si tengo 11 ComboBox, 11 veces tengo repetir dicho código y solo cambiar el nombre del combo y la columna de donde tomará lo datos, o ¿Existe otro método para incluir el llenado de los 11 Combobox con una sola rutina?

Gracias por tu tiempo, quedo a tus ordenes.

Los combos son dependientes, es decir, ¿el combo2 depende de lo que llenaste en el combo1?


Si no son dependientes

Private Sub UserForm_Activate()
'Por.DAM
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
        If Cells(i, "A") <> "" Then ComboBox1.AddItem Cells(i, "A")
        If Cells(i, "B") <> "" Then ComboBox2.AddItem Cells(i, "B")
        If Cells(i, "C") <> "" Then ComboBox3.AddItem Cells(i, "C")
    Next
End Sub

Excelente pregunta!

No habia considerado ese punto y es muy importante para mi, la observación que usted me hace es fundamental, ya que ignoro si los 11 ComboBox deben ser o no dependientes de uno. El objetivo es llenar el listbox con el criterio (s) de busqueda utilizando filtros por medio de los combos.

Por ejemplo:

Selecciono el combo3 que se refiere a "AUTOS 2014" y automáticamente aparecen en el listbox  todos los nombres de autos relacionados con el primer criterio, pero sucede que necesito saber de alguna marca en particular y de nuevo selecciono otro combo con el nombre de "MARCAS" y elijo "Chevrolet"  en otro "MOTOR" etc.. Y así sucesivamente hasta llegar a uno en particular. 

Seguramente se preguntará por qué complicarme la vida si es mejor ir directamente al grano sin tanto preambulo como lo hicimos en el anterior form.

Pues bien, le comparto que también necesito hacer reportes de manera global utilizando un solo criterio. Por lo que requiero de esta modalidad "de lo general a lo particular y de lo particular a lo general".

Disculpeme si no soy muy claro en mi explicación de cualquier modo quedo a su dispocisión.

Espero como siempre amablemente sus comentarios al respecto y buen provecho!

La pregunta para cargar combos sin espacios ya está respondida, ahora habría que crear una nueva para cargar varios combos.

Preparo la macro y te la envío a tu correo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas