Como actualizar datos combobox sin cerrar el form?

Chicos tengo un combox en un formulario con proveedores. Al lado del combobox tengo un botón para modificar los datos de los proveedores (elimar, editar y crear).

Este formulario si lo abro solo (sin el formulario de la introducción de datos) no me da problemas, me crea, modifica y elimina lo que le selecciono

El problema viene cuando quiero abrir el formulario de edición de proveedores (llamado formulario_proveedor) desde el furmulario de introducción de datos. No se actualiza los campos.
He intentado que al hacer click sobre el combo borre los datos y los vuelva a cargar (sin resultado),
cerrar el formulario de introducción de datos a la vez que abre el de edición y una vez termina de hacer las modificaciones abrir el formulario de introducción de datos (sin resultado)...
¿Cómo podría hacer para que un combobox se actualizara sin necesidad de cerrar el formulario?

Respuesta
1

Coincido con Abraham, deberías explicar un poco más o compartir el libro. No obstante, te diré una idea generalizada. Todo dependerá de como cargas el combobox inicialmente.

Hay 4 maneras de cargar un combobox/listbox. Una es por ventana de propiedad y tres son por código.

1. Estableciendo el RowSource por la ventanita de propiedades. (Sin código)

2. Estableciendo el RowSource por macro (con código)

3. Usando el método AddItem (con código)

4. Pasandole un Array (con codigo)

En tu caso te setviria cualquiera menos la primera. Solo basta con volver a ejecutar el procedimiento de "cargar" el combobox para que se actualice la información.

PD: Casualmente, este podría ser un ejemplo de cuando una función o macro reusable viene al rescate. Imagina que quieras actualizar la info cada vez que agregues, borres, edites. Tendrías que escribir el mismo proceso 3 veces. Por otro lado, con un procedimiento independiente solo lo escribes una vez y lo usas cuantas quieras donde quieras.

Hola Andy te explico como funciona el código.

Al iniciar el form se cargan los combobox por AddItem

Private Sub UserForm_Initialize()
 Adjuntar proveïdors
Set rango = Range("Proveïdors")
For Each celda In rango
    proveidor.AddItem celda.Value
Next celda
'Adjuntar Programes
Set rango = Range("Programes")
For Each celda In rango
    programa.AddItem celda.Value
Next celda
End sub

En el formulario para introducir datos y hay 1 boton (1 boton PROVEIDORS y otro para PROGRAMES) para abrir otro formulario para editar el contenido de las celdas que se han cargado en el combobox.

El problema que he detectado es que si abro el formulario de modificación y modifico algún dato no se ve reflejado en el Formulario de introducción de datos. Si cierro el formulario y lo vuelvo abrir si que están los datos actualizados.

Me gustaría que al modificar los datos se actualizaran los 2 combobox sin necesidad de volver abrir el form y perder los datos introducidos previamente (que no se han guardado)
Tengo que decir que el formulario de modificación también se tiene acceso desde la hoja de datos (no hace falta ir al formulario de introducir datos)

Es que por naturaleza el combobox no se actualiza, los combobox y los listbox solo toman los datos una vez, y se queda en una especie de memoria, no importa cuanto cambies, seguirá mostrando lo que había en la memoria hasta que se vuelva a ejecutar el proceso de cargar los datos, en este caso con el AddItem.

En teoría debes volver a cargar el combobox en tiempo de ejecución. Cabe destacar que antes debes limpiarlo por completo.

Así que como te dije, si no quieres usar una función/macro independiente, deberías escribir el proceso de cargar el combobox en todos los controles que hagan alguna modificacion.

Observa este ejemplo que grabé, fíjate que en el primer intento, modifico la hoja, pero el combobox no se actualiza. Luego copie y pegue el código de cargar, y en el segundo intento si que se actualiza.

VIDEO DEMO

Andy

Solo como dato extra, para que veas como luce el proyecto usando una macro independiente:

VIDEO DEMO 2

Si te fijas, el modulo del formulario queda más limpio, y la ÚNICA macro encargada de cargar el combobox la puedo llamar cuantas veces quiera en una simple línea.

1 respuesta más de otro experto

Respuesta
1

[Hola

Estimado, no se entiende, recuerda que tu al leer probablemente entiende claramente todo, pero desde este lado de la pantalla no conocemos tu archivo ni qué tienes en él. Trata de, o colocar el archivo en algún Drive (OneDrive, Google Drive, DorpBox, etc.) desde el que puedas compartirlo por aquí o en todo caso explica con detalles más que de descripción de lo que ves/piensas, de programación: Cómo y o en qué momentos se llena ese combobox, cuál es la relación entre activar un Userform y ese combobox, por qué o qué has intentado para que se "actualice", a qué llamas actualziar tú, de dónde salen los datos iniciales del comobbox y qué debe modificarse cuando dices "actualizar", etc.

Abraham Valencia

Hola Abraham he descrito un poco más el problema basándome en lo que me has dicho en la respuesta de Andy. Para no volver a repetir la respuesta agradecería que la leyeras y que si tienes alguna duda más me lo hagas saber por aquí mismo.

Muchas gracias

No hay problema estimado, vi que nuestro amigo Andy ya lo resolvió, así que espero sepas adaptarlo.

Saludos]

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas