Hola, descubrimos la solución a lo que necesitas, deslízate y la obtendrás a continuación.
Solución:
A veces, un simple mensaje en la barra de estado es suficiente:
Esto es muy simple de implementar:
Dim x As Integer
Dim MyTimer As Double
'Change this loop as needed.
For x = 1 To 50
' Do stuff
Application.StatusBar = "Progress: " & x & " of 50: " & Format(x / 50, "0%")
Next x
Application.StatusBar = False
Aquí hay otro ejemplo que usa StatusBar como una barra de progreso.
Al usar algunos caracteres Unicode, puede imitar una barra de progreso. 9608 – 9615 son los códigos que probé para las barras. Simplemente seleccione uno de acuerdo con la cantidad de espacio que desea mostrar entre las barras. Puede establecer la longitud de la barra cambiando NUM_BARS. Además, al usar una clase, puede configurarla para que maneje la inicialización y la liberación de la barra de estado automáticamente. Una vez que el objeto sale del alcance, se limpiará automáticamente y liberará la barra de estado de nuevo en Excel.
' Class Module - ProgressBar
Option Explicit
Private statusBarState As Boolean
Private enableEventsState As Boolean
Private screenUpdatingState As Boolean
Private Const NUM_BARS As Integer = 50
Private Const MAX_LENGTH As Integer = 255
Private BAR_CHAR As String
Private SPACE_CHAR As String
Private Sub Class_Initialize()
' Save the state of the variables to change
statusBarState = Application.DisplayStatusBar
enableEventsState = Application.EnableEvents
screenUpdatingState = Application.ScreenUpdating
' set the progress bar chars (should be equal size)
BAR_CHAR = ChrW(9608)
SPACE_CHAR = ChrW(9620)
' Set the desired state
Application.DisplayStatusBar = True
Application.ScreenUpdating = False
Application.EnableEvents = False
End Sub
Private Sub Class_Terminate()
' Restore settings
Application.DisplayStatusBar = statusBarState
Application.ScreenUpdating = screenUpdatingState
Application.EnableEvents = enableEventsState
Application.StatusBar = False
End Sub
Public Sub Update(ByVal Value As Long, _
Optional ByVal MaxValue As Long= 0, _
Optional ByVal Status As String = "", _
Optional ByVal DisplayPercent As Boolean = True)
' Value : 0 to 100 (if no max is set)
' Value : >=0 (if max is set)
' MaxValue : >= 0
' Status : optional message to display for user
' DisplayPercent : Display the percent complete after the status bar
'
Ejemplo de uso:
Dim progressBar As New ProgressBar
For i = 1 To 100
Call progressBar.Update(i, 100, "My Message Here", True)
Application.Wait (Now + TimeValue("0:00:01"))
Next
En el pasado, con proyectos de VBA, usé un control de etiqueta con el fondo coloreado y ajusté el tamaño según el progreso. Algunos ejemplos con enfoques similares se pueden encontrar en los siguientes enlaces:
- http://oreilly.com/pub/h/2607
- http://www.ehow.com/how_7764247_create-progress-bar-vba.html
- http://spreadsheetpage.com/index.php/tip/displaying_a_progress_indicator/
Aquí hay uno que usa Autoformas de Excel:
http://www.andypope.info/vba/pmeter.htm