validacion una tabla que inteligentes funciones filas etiquetas etiqueta ejemplos desplegables datos crear contiene como celda excel excel-vba

una - ¿Cómo creo un cuadro de diálogo de estado en Excel?



que es una celda en excel (5)

El cuadro de diálogo también se ejecuta en el mismo subproceso de interfaz de usuario. Por lo tanto, está demasiado ocupado para volver a pintarse. No estoy seguro si VBA tiene buenas capacidades de multi-threading.

Creé un generador de informes de base de datos en Excel. Intento crear un cuadro de diálogo que muestre la información de estado a medida que se ejecuta el programa.

Cuando genero el informe, aunque aparece el cuadro de diálogo, no puedo actualizar / actualizar la información que muestra. La mayoría de las veces, el cuadro de diálogo solo aparece parcialmente. He intentado usar el método .repaint, pero sigo obteniendo los mismos resultados. Solo veo el cuadro de diálogo completo después de generar el informe.


He usado la barra de estado de Excel (en la esquina inferior izquierda de la ventana) para mostrar la información de progreso de una aplicación similar que desarrollé en el pasado.

Funciona muy bien si solo desea mostrar actualizaciones de texto sobre el progreso, y evita la necesidad de un diálogo de actualización en absoluto.

Ok @JonnyGold, aquí hay un ejemplo del tipo de cosas que utilicé ...

Sub StatusBarExample() Application.ScreenUpdating = False '' turns off screen updating Application.DisplayStatusBar = True '' makes sure that the statusbar is visible Application.StatusBar = "Please wait while performing task 1..." '' add some code for task 1 that replaces the next sentence Application.Wait Now + TimeValue("00:00:02") Application.StatusBar = "Please wait while performing task 2..." '' add some code for task 2 that replaces the next sentence Application.Wait Now + TimeValue("00:00:02") Application.StatusBar = False '' gives control of the statusbar back to the programme End Sub

¡Espero que esto ayude!


Intente agregar una llamada DoEvents en su ciclo. Eso debería permitir que el formulario vuelva a pintar y acepte otras solicitudes.


El siguiente código funciona bien cuando se realizan acciones dentro de Excel (XP o posterior).

Para las acciones que tienen lugar fuera de Excel, por ejemplo, conectarse a una base de datos y recuperar datos, lo mejor que ofrece es la oportunidad de mostrar diálogos antes y después de la acción (por ejemplo, "Obteniendo datos" , " Obteniendo datos" ).

Cree un formulario llamado "frmStatus" , ponga una etiqueta en el formulario llamado "Label1" .

Establezca la propiedad del formulario ''ShowModal'' = false , esto permite que el código se ejecute mientras se muestra el formulario.

Sub ShowForm_DoSomething() Load frmStatus frmStatus.Label1.Caption = "Starting" frmStatus.Show frmStatus.Repaint ''Load the form and set text frmStatus.Label1.Caption = "Doing something" frmStatus.Repaint ''code here to perform an action frmStatus.Label1.Caption = "Doing something else" frmStatus.Repaint ''code here to perform an action frmStatus.Label1.Caption = "Finished" frmStatus.Repaint Application.Wait (Now + TimeValue("0:00:01")) frmStatus.Hide Unload frmStatus ''hide and unload the form End Sub


Inserte una hoja en blanco en su libro de trabajo. Cambie el nombre de la hoja, por ej. "información"

Sheets("information").Select Range("C3").Select ActiveCell.FormulaR1C1 = "Updating Records" Application.ScreenUpdating = False Application.Wait Now + TimeValue("00:00:02")

Continuar Macro

Sheets("information").Select Range("C3").Select Application.ScreenUpdating = True ActiveCell.FormulaR1C1 = "Preparing Information" Application.ScreenUpdating = False Application.Wait Now + TimeValue("00:00:02")

Continuar Macro

Etc Alternativamente, puede seleccionar una celda en blanco en algún lugar de la hoja existente en lugar de insertar una hoja nueva

Range("C3").Select ActiveCell.FormulaR1C1 = "Updating Records" Application.ScreenUpdating = False Application.Wait Now + TimeValue("00:00:02")

Etc