Barra de Progreso Excel VBA 2013

Estoy utilizando por primera vez la barra de progreso en un código VBA en Excel 2013.

Con el ejemplo que tomé desde la web y adapté a mi proyecto, hice varias pruebas para ver su funcionamiento. Por lo que pude ver, se muestra la barra de progreso y luego realiza las tareas del resto del código VBA para finalizar.

La consulta es, ¿existe la forma de que se visualice la barra de progreso mientras el resto del código realiza las tareas solicitadas?

Application.ScreenUpdating = False
Application.DisplayAlerts = False

UserForm1.Hide
ProgressForm.Show False

Dim R As Integer
Dim MT As Double
For R = 1 To 20
MT = Timer
ProgressForm.ProgressBar1.Max = 20
Do
Loop While Timer - MT < 0.05
ProgressForm.ProgressBar1.Value = R
ProgressForm.Label1.Caption = "Consultando datos......."
DoEvents
Next R
Unload ProgressForm

2 Respuestas

Respuesta
1

Carlos,

Encontré esta barra de progreso hace algún tiempo...

Te adjunto el código y el archivo con el formulario...

Solo debes importar formulario y agregarlo a tu archivo, y poner el código que quieres que ejecute en las partes señaladas...

Private Sub UserForm_Activate()

Application.ScreenUpdating = False

PorcentBar = 0.1
Call UpdateBarra(PorcentBar)
'código...
PorcentBar = 0.3
Call UpdateBarra(PorcentBar)

'código...

PorcentBar = 0.5
Call UpdateBarra(PorcentBar)
'código...
PorcentBar = 0.7
Call UpdateBarra(PorcentBar)
'código...

PorcentBar = 0.9
Call UpdateBarra(PorcentBar)
'código...

PorcentBar = 1
Call UpdateBarra(PorcentBar)

Unload BarraPaso1

End Sub

Sub UpdateBarra(PorcentBar)
With BarraPaso1
.FrameAvance.Caption = Format(PorcentBar, "0%")
.LabelAvance.Width = PorcentBar * (.FrameAvance.Width - 10)
.Repaint
End With
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Application.ScreenUpdating = False

If CloseMode = vbFormControlMenu Then
Cancel = True
End If

End Sub

https://www.dropbox.com/s/184gvcspujsz7b1/Desktop.rar?dl=0 

Respuesta
2

El avance del progressbar va en funcionamiento de esta línea

ProgressForm.ProgressBar1.Value = R

En este caso R va tomando valores de 1 en 1 desde el 1 hasta el 20.

Para que funcione en tu código se tiene que revisar lo que estás procesando para entonces cambiar la R por el dato de tu proceso, por ejemplo, si vas a procesar 1000 registros entonces la macro sería así:

 UserForm1. Hide
    ProgressForm.Show False
    '
    registros = 1000
    ProgressForm.ProgressBar1.Max = registros
    For R = 1 To registros
        '
        'en esta parte hay que poner tu código
        '
        ProgressForm.ProgressBar1.Value = R
        ProgressForm.Label1.Caption = "Consultando datos......."
        DoEvents
    Next R
    '
    Unload ProgressForm

Saludos. Dante Amor

Si es lo que necesitas.

Una aclaración solamente, los registros significan líneas o renglones?

Los registros serán las filas o renglones de tu hoja de excel. Si tu hoja tiene 580 filas con datos que quieres procesar, entonces

registros = 580

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas