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