Consulta basica de combo box

Uso un combo box que carga datos de una hoja llamada compradores, el rango que pongo de seleccion es a2:a100
en este momento tengo 7 compradores cargados (mediante otro formulario voy cargando compradores y se van sumando a la lista)
Cuando se abre la lista del combobox me salen los 7 comprdores y 73 espacios en blanco en la lista
la pregunta es como delimitar para que solo salgan los campos q tengan caracteres y no tome los espacios vacios
espero la pregunta se entienda, soy nuevo en esto de buscar soluciones e ire aprendiendo a sintetizar las preguntas
aqui el codigo que use
Private Sub UserForm_Initialize()
Dim rango, celda As Range
Set rango = Sheets("compradores").Range("A2:A100")
For Each celda In rango
    Cmb1.AddItem celda.Value
Next celda
End sub

3 Respuestas

Respuesta
1

Lo importante en estos casos es encontrar la última celda con datos, una vez obteniendo la última fila con datos, cargas la información de tu celda inicial hasta la celda final.

La última celda con datos la puedes encontrar de arriba hacia abajo:

ufila = Range("A2").End(xlDown). Row

De abajo hacia arriba:

ufila = Range("A" & Rows.Count).End(xlUp).Row

O leer dato por dato hasta encontrar una celda en blanco, para esto puedes utilizar un ciclo, puede ser While

    fila = 2
    Do While Sheets("compradores").Cells(fila, "A") <> ""
        fila = fila + 1
    Loop
    ufila = fila - 1

O con un For

    For i = 2 To Rows.Count
        If Sheets("compradores").Cells(i, "A") = "" Then
            ufila = i - 1
            Exit For
        End If
    Next

Existen otras maneras, cada una tiene sus ventajas y desventajas, depende la situación de tu hoja y de la necesidad que tengas.


Para cargar los datos en el combo, también puedes utilizar la propiedad List :

Private Sub UserForm_Initialize()
    ComboBox1.List = Sheets("compradores").Range("A2:A" & Sheets("compradores").Range("A" & Rows.Count).End(xlUp).Row).Value
End Sub

Sal u dos

Respuesta
1

Te dejo una alternativa:

Private Sub UserForm_Initialize()
Dim rango, celda As Range
Dim UltimaFila As Long
Let UltimaFila = Sheets("compradores").Cells(Rows.Count, 1).End(xlUp).Row
Set rango = Sheets("compradores").Range("A2:A" & UltimaFila)
For Each celda In rango
    Cmb1.AddItem celda.Value
Next celda
End Sub

Comentas

Abraham Valencia

Respuesta
1

Usa esta macro

Private Sub UserForm_Initialize()
Dim rango As Range
Set datos = Range("a2").CurrentRegion
With datos
Rem ---si tiene encabezados activa esta linea------
'Set datos = .Rows(2).Resize(.Rows.Count - 1, .Columns.Count)
ComboBox1.RowSource = .Columns(1).Address
End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas