Como refrescar un combobox automáticamente

Tengo en un formulario un Combobox que tiene un listado de usuarios; el formulario me permite ingresar usuarios nuevos, el problema es que cuando creo uno y doy clic en el botón guardar, no me aparece en el combobox, sino que tengo que salir del formulario y volver a ingresar para poder verlo en el listado. No se si existe algún código para que tan pronto guarde, se muestre el contacto en el combobox.

1 respuesta

Respuesta
2

Esta sería una forma.

Supongo que al iniciar el userform cargas los datos en el combo, por ejemplo

Private Sub UserForm_Activate()
    For i = 2 To Range("B" & Rows.Count).End(xlUp).Row
        ComboBox1.AddItem Cells(i, "B")
    Next
End Sub

Entonces después de ingresar nuevos usuarios, limpias el combo y lo vuelves a cargar, por ejemplo:

Private Sub CommandButton1_Click()
    'Guardar
    '
    'Inicia va tu código para guardar
    '
    'Fin tu código para para guardar
    '
    'Cargar nuevamente el combo
    ComboBox1. Clear 'se limpia el combo y se agregan nuevamente todos los dados
    For i = 2 To Range("B" & Rows.Count).End(xlUp).Row
        ComboBox1.AddItem Cells(i, "B")
    Next
End Sub

Cambia la columna "B" por la columna donde tienes tus datos.


.

.

Hola Dante, como estas?

La verdad es que pase el código igual porque mi combobox se llama combobox1, pero me generó errores:

- Yo lo ensaye en ambos eventos (initialize y activate) y al cargar el formulario me sale el siguiente error: 

Lo único que tengo ahí como raro es que el rowsource del combobox es un rango dinámico que cree que se llama name1.

Muchas gracias.

Si cargas el combo con rowsource y después cargas con AddItem te envía el mensaje:

"Se ha producido el error '70' en tiempo de ejecución"

Lo que debes hacer es ajustar el rango de name1. Por ejemplo:

Cargas con rowsourse en el evento Activate:

Private Sub UserForm_Activate()
    ComboBox1.RowSource = Range("name1").Address
End Sub

Después ajustas el rango del "name1" y cargas el combo nuevamente con rowsource:

Private Sub CommandButton1_Click()
    u = Range("A" & Rows.Count).End(xlUp).Row + 1
    Range("A" & u).Value = TextBox1
    filas = Range("name1").Rows.Count
    rango = Range("name1").Resize(filas + 1).Address(ReferenceStyle:=xlR1C1)
    ActiveWorkbook.Names("name1").RefersToR1C1 = "=" & ActiveSheet.Name & "!" & rango
    ComboBox1.RowSource = Range("name1").Address
End Sub

Trata de adaptarlo a tu userform, si tienes problemas , pon todo tu código y le hago las adecuaciones.


.

.

Hola Dante.

Lo que hizo el código que me enviaste fue borrarme los datos del combobox. Te envío el código del botón guardar y del evento activate.

Este es el código del botón guardar:

Sheets("basedatos").Select
If Range("b2").Value = "" Then
Range("b2").Value = ComboBox1.Value
Range("c2").Value = txtcontacto.Value
Range("d2").Value = txtdireccion.Value
Range("e2").Value = txtfijo.Value
Range("f2").Value = txtcel.Value
Range("g2").Value = txtemail.Value
Range("h2").Value = lblsaldo.Caption
Range("i2").Value = txtestado.Value
Range("j2").Value = txtnit.Value
Range("a2").Value = txtcod.Value
Range("k2").Value = txttipo.Value
Else
Range("b2").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveCell.Value = ComboBox1.Value
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtcontacto.Value
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtdireccion.Value
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtfijo.Value
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtcel.Value
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtemail.Value
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = lblsaldo.Caption
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtestado.Value
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txtnit.Value
ActiveCell.Offset(0, 1).Select
ActiveCell.Value = txttipo.Value
ActiveCell.Offset(0, -10).Select
ActiveCell.Value = txtcod.Value

'Aqui puse el codigo que me enviaste

u = Range("A" & Rows.Count).End(xlUp).Row + 1
    Range("A" & u).Value = TextBox1
    filas = Range("name1").Rows.Count
    rango = Range("name1").Resize(filas + 1).Address(ReferenceStyle:=xlR1C1)
    ActiveWorkbook.Names("name1").RefersToR1C1 = "=" & ActiveSheet.Name & "!" & rango
    ComboBox1.RowSource = Range("name1").Address

end if

En el evento activate, tengo lo siguiente:

ComboBox1.RowSource = Range("name1").Address

Dim I As Long
For I = 2 To Range("B" & Rows.Count).End(xlUp).Row
 ComboBox1.AddItem Cells(I, "B")
 Next

Muchas gracias.

Pero yo no conozco cómo está tu userform, ni tampoco cómo está tu Nombre "name1"

Lo que te dije fue esto:

Trata de adaptarlo a tu userform

Pero no lo adaptaste, simplemente lo pegaste.

Lo que yo te puse son ejemplos, debes adaptarlo a tu userform, ya que no proporcionas ninguna información de cómo están tus datos en la hoja ni qué controles tienes en tu userform.


Con gusto te ayudo, pero debes poner cómo tienes la información en la hoja.

Los nombres de hojas.

Cómo cargas tu combo anteriormente.

Una imagen de tu hoja donde se vea el rango de tu "name1"

Hola Dante.

Si que pena con vos, que no te di la suficiente información al respecto, el problema es que el código que enviaste no lo entiendo muy bien, por eso lo copie y pegue.

La hoja se llama basedatos, el rango se llama name1 y es un rango dinámico que en el momento está en la columna B

Anexo la imagen donde esta el formulario y la imagen de la base de datos.

Ademas, te quería preguntar si por casualidad sabes como ordenar el combobox alfabéticamente sin que afecte la hoja donde están los datos, es decir que solo ordene cuando se ejecute el formulario.  si puedes ver la imagen, el listado no esta organizado alfabéticamente.

Ademas, tengo programado el botón buscar que me ubica los datos según el cliente seleccionado.

Muchas gracias.

Te envié mis datos en la nueva pregunta que pusiste.

Podrías valorar esta respuesta y continuamos en la otra pregunta.

Sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas