Formulario para eventos en segundo plano

Soy nuevo por aquí, y necesito tu ayuda... Quisiera disponer de un formulario que informe que se están ejecutando acciones tras él, tipo: "cargando datos", "procesando información", "imprimiendo resultados", etc. En un Label, en determinada línea del código le daré Form1. Label1.Caption="Ejemplo". Pero quisiera saber como ejecutar mis rutinas mientras se muestra el Form... Desde ya muchas gracias, por dedicar tu tiempo a ayudar a los demás...

2 respuestas

Respuesta
1

primero tu proyecto no debe iniciar con un form sino con un procedimiento sub main

en un modulo declaras el sub main

sub main()

... aca pones la llamada al primer evento que debe realizar tu programa

end sub

Luego solo es cosa de hacer las llamadas al form que usaras como visualizador de tus procesos,

aca hay un ejemplo basico que te muestra la idea :

necesitas un form y un label en el

en un modulo pones esto:

Option Explicit
Sub n()
Dim i As Integer
Form1.Show
For i = 0 To 10000
Form1.Label1.Caption = i
DoEvents
Next
End Sub

Sub main()
N ' llamada al sub n desde donde llamaremos el form1 y mostraremos en su label el valor de i
End Sub

Previamente en el menu proyecto/propiedades del proyecto declaras como objeto inicial Sub Main

Hola nuevamente, gracias por responder... me falto algo importante de señalar, estoy trabajando en VBa para Excel.

Y ejecutando el código que me has dado, me ocasiona el mismo problema al ejecutar la línea Form1.Show se detiene la ejecución del código siguiente... me frustré... jjj... espero me ayudes...

En ese caso basicamente seria lo mismo salvo por el sub main, ahora si aplicas lo que estas pensando hacer, lo unico que lograras es hacer mas lento tus procesos, puesto que estaras saltando desde tu macro al formulario.

COrrecto... pero al hacer lo mismo, se ejecuta el código y cada vez que entra a ejecutar sub n() el proceso se detiene al mostrar el form (Form1.Show) y tengo que cerrarlo para que siga con la ejecución del código, lo que yo quisiera es que el form se muestre, durante todo el proceso de ejecución de una subrutina. Por ejemplo:

Sub Ejemplo()

form1.label1.caption="Proceso Ejemplo iniciado"

Form.Show 'aquí se muestra el formulario, pero que no paralice el proceso subsiguiente.

'aquí va un chorro de código

form1.label1.caption=" Guardando Proceso"

'aquí va la otra porción de código

form1.label1.caption="Proceso Terminado"

Form.hide

End Sub

Esa es la idea, que se ejecute Ejemplo(), salte el formulario y en transcurso solo cambie el label.caption, y al final se cierre....

Incluso se podría poner una imagen *.gif que me diga espere con una figura en movimiento.

Saludos....

Como quieras... lo primero es que el form ( en excel) debe tener su propiedad "showmodal" = a false, de otra manera pasara lo que tu dices. Luego seria:

Sub Ejemplo()
form.Show 'aquí se muestra el formulario, pero que no paralice el proceso subsiguiente.
form1.Label1.Caption = "Proceso Ejemplo iniciado"
'aquí va un chorro de código
form1.Label1.Caption = " Guardando Proceso"
'aquí va la otra porción de código
form1.Label1.Caption = "Proceso Terminado"
Unload form
End Sub

Asi primero levantamos el form luefo aplicamos los caption al label y al final unload form para bajar la instancia del formulario, con hide solo lo ocultas pero no eliminas la instancia de la memoria.

Respuesta
1

No he entendido mucho tu problema amigo, pero creo que si creas una sub "main" o como le quieras llamar la cual tenga el código userform.show y en las propiedades de la userform le pongas en "initialize" o "activate" una llamada a cada uno de los procedimientos por ejemplo

userform_activate ()

Procedimiento1

Procedimiento2

Procedimiento3

Procedimiento4

donde cada uno de ellos es lo que quieres ejecutar y ya dentro del codigo de tu procedimiento le pones userform.label1.caption = "Estoy haciendo x cosa" 

Y hasta el final en el ultimo procedimiento agregas: userform. Hide

Con eso debería bastar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas