Para Luis Mondelo y todo aquel que sepa sobre este tema

Tengo un UserForm1 en VBA que carga los datos en una hoja de Excel ("Hoja1") y tengo un segundo UserForm2 con un ComboBox (ComboBox1) que depende de los datos de la "Hoja1", este combobox es utilizado para mostrar los códigos de la "Hoja1" que están en la columna "A", aquí una imagen de la "Hoja1"

bien, tengo este codigo que me llena el combobox con los datos de la "Hoja1"

Dim rango, celda As Range
Set rango = Range("Lista")

For Each celda In rango
ComboBox1.AddItem celda.Value
Next celda

PD: "Lista" es un rango que utilice y le coloque ese nombre aquí una imagen y el código para ese rango

El problema esta, en que el código me toma también las celdas vacías y las muestra en el combobox. Que código podría usar para que en el combobox solo me aparezcan los datos o los códigos de la "Hoja1" sin que me tome las celdas vacías, y a medida que se agreguen códigos en esta hoja se reflejen en el ComboBox1 automáticamente.

Espero me puedan ayudar con este problemita. Gracias.!

1 respuesta

Respuesta
1

Me voy a permitir responderte hasta tanto Luis regrese al foro.

Con la fórmula DESREF no debiera mostrarte filas vacías al final.

Pero si tenés celdas vacías entremedio podés solventarlo de este modo:

For Each celda In Range("Lista")If celda.Value <> "" Then ComboBox1.AddItem celda.ValueNext celdaEnd Sub

Si el proceso va agregando filas en la hoja, para que se vea reflejado en el combobox lo tenés que volver a llenar, ya sea cargandolo todo nuevamente o solo agregando el último item con:

Combobox1.Additem 'tu_celda'

Donde 'tu_celda' será en la que agregaste el dato nuevo.

Si no se comprendió avisame que lo aclaro un poco más.

Lo que entendí fue, que con ese código no me tomara las celdas vacías pero al ir agregando datos a excel tengo que ir agregándolo también al combobox para que se pueda reflejar ya que no se refleja automáticamente, ¿es eso no?

Así es. Cada vez que agregas datos a la hoja debes agregarlo al combo... puede ser solo con una línea (Combobox1. Additem dato ) o ejecutando el bucle que utilizas en el evento inicial.

No tengo idea de tu código como para dejarte el código apropiado... si te presenta alguna dificultad, escribime las instrucciones que alimentan la hoja.

Sdos!

¿Veo qué la consulta aún sigue pendiente ... hay algo que no se comprendió? ¿No resolvió tu consulta? Si es así podés solicitar aclaraciones y adjuntar el código que alimenta al combo para agregarle las instrucciones necesarias.

Si el tema está resuelto, no olvides valorar la respuesta.

Sdos!

Hola! Bueno en realidad mi único problema es ese, el de las celdas vacías que quiero que el combobox no me tome

A continuación el resumen de lo dicho anteriormente:

Tenés un rango definido como Listas con la función DESREF

Con datos así presentados, si colocas en la propiedad RowSource del Combobox:

=Listas te mostrará la lista sin filas vacías hacia abajo.

Ahora, si tu lista va presentando 'espacios' como en la imagen siguiente, tenés que dejar la propiedad RowSource vacía y colocar el código que te envié. Generalmente este tipo de código lo colocamos en el evento Initialize.

Private Sub UserForm_Initialize()
For Each celda In Range("Listas")
If celda.Value <> "" Then ComboBox1.AddItem celda.Value
Next celda
End Sub

Ahora, como además preguntabas acerca de alimentar la hoja y que se vea reflejado en el combo, te respondo a continuación (aunque algunos puedan pensar que es materia de otra consulta ;)

No tengo idea de tu código, pero seguramente irás agregando datos a tu hoja con algo como esto y en la imagen ves el resultado:

Private Sub CommandButton1_Click()
'x Elsamatilde
'guardar datos
'primer fila destino de los datos en Hoja1
filx = Sheets("BD LOPA").Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("BD LOPA").Range("A" & filx) = TextBox1
Sheets("BD LOPA").Range("B" & filx) = TextBox2
'aquí se agrega el item al combobox
ComboBox1.AddItem TextBox1
End Sub

Si en cambio eliminas datos de la hoja y también necesitas ver actualizado el combobox, lo tendrás que alimentar nuevamente.

La rutina del botón Eliminar, donde eliminas el dato de tu hoja tendrá instrucciones a continuación como estas:

Private Sub CommandButton2_Click()
'eliminar
'instrucciones que eliminan registro de la hoja
'se carga nuevamente el combobox
ComboBox1.Clear
For Each celda In Range("Listas")
If celda.Value <> "" Then ComboBox1.AddItem celda.Value
Next celda
End Sub

Por favor lee con atención y trata de adaptarlo a tu formulario. Si te presenta alguna dificultad tendrás que enviarmelo a mi correo porque más claro que lo que expongo aquí no creo poder.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas