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.
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.

1 respuesta más de otro experto

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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas