Barra de Progreso

Hola, necesito tu ayuda para ver si me puedes resolver la siguiente duda:
He conseguido un ejemplo de archivo en el que se utiliza una barra de progreso con el siguiente código:
Sub Test()
' The UserForm1_Activate sub calls Main
UserForm1.LabelProgress.Width = 0
UserForm1.Show
End Sub
Sub Main()
' Inserts random numbers on the active worksheet
Dim Counter As Integer
Dim RowMax As Integer, ColMax As Integer
Dim r As Integer, c As Integer
Dim PctDone As Single
If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
Cells.Clear
Application.ScreenUpdating = False
Counter = 1
RowMax = 100
ColMax = 25
For r = 1 To RowMax
For c = 1 To ColMax
Cells(r, c) = Int(Rnd * 1000)
Counter = Counter + 1
Next c
PctDone = Counter / (RowMax * ColMax)
With UserForm1
.FrameProgress.Caption = Format(PctDone, "0%")
.LabelProgress.Width = PctDone * (.FrameProgress.Width - 10)
End With
' The DoEvents statement is responsible for the form updating
DoEvents
Next r
Unload UserForm1
End Sub
'Al Activarse el formulario llama al procedimiento Main ...
Private Sub UserForm_activate()
Call Main
End Sub
El mismo está diseñado para que trabaje con un ejemplo de números aleatorios, pero yo necesito que trabaje con un procedimiento que a continuación expongo en el que simplemente ejecuta varias macros una detrás de otra, de esta forma...
Private Sub CmdInsertarDatos_Click()
Macro_inicio
Macro_1
Macro_2
Macro_3
Macro_4
Macro_5
Macro_6
Macro_7
Macro_8
End Sub
¿Es posible aplicar el ejemplo para que la barra de progreso se inicie cuando comience la primera macro y finalice cuando termine la última?
Me encantaría poder colocar dicha utilidad a mi aplicación, pero si consideras que es complicado lo dejaré como está.
Gracias de antemano.

2 respuestas

Respuesta
1
Asumo que ya tienes tu formulario con el diseño de la barra de progreso.
Los siguientes códigos permiten que se muestre una barra de progreso adaptada a tú código.
En el panel de macros del formulario que tienes para mostrar la barra, pega este código:
Private Sub UserForm_activate()
Call Main
End Sub
---
Luego en un módulo de VBA pega lo siguiente:
Public Counter
Sub InicioBar()
UserForm1.LabelProgress.Width = 0
UserForm1.Show
End Sub
Sub Main()
' Inserts random numbers on the active worksheet
Dim Counter As Integer
Dim RowMax As Integer, ColMax As Integer
Dim r As Integer, c As Integer
Dim PctDone As Single
Counter = 0
Macro_inicio
ActuaBarra
Macro_1
ActuaBarra
Macro_2
ActuaBarra
Macro_3
ActuaBarra
Macro_4
ActuaBarra
Macro_5
ActuaBarra
Macro_6
ActuaBarra
Macro_7
ActuaBarra
Macro_8
Unload UserForm1
End Sub
'Al Activarse el formulario llama al procedimiento Main ...
Private Sub ActuaBarra()
TotProc = 9
Counter = Counter + 1
PctDone = Counter / TotProc
With UserForm1
.FrameProgress.Caption = Format(PctDone, "0%")
.LabelProgress.Width = PctDone * (.FrameProgress.Width)-1
End With
DoEvents
End Sub
Bien, el proceso se dipara con la macro InicioBar()
Esta, a su vez, llama el formulario de barra que al activarse dispara la macro Main. Allí coloqué tu secuencia de macros y le intercalé un llamado recursivo a una rutina que maneja el avance de la ejecución.
La base para mostrar tal progreso es qué cantidad de macros se ejecutaron, respecto a la cantidad de macros total a ejecutar (9).
Desconozco qué hacen tus macros pero, en las pruebas que hice, la barra se comportó satisfactoriamente.
Espero que te sirva.
Buen fin de semana!
Fernando
Respuesta
1
La barra de progreso muestra el progreso en función del valor que contenga su propiedad value, es decir si le asignas 50, y con los valores por defecto en Min = 0, Max = 100, la barra mostrara que esta al 50%, entonces solo tienes que ir poniendo en value el valor que le corresponda al progreso en cada macro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas