BARRA DE PROGRESO

(Para un proceso cíclico)

El ejemplo escribe números aleatorios, en el rango A1:AX200, y muestra el porcentaje realizado, tanto gráficamente como numéricamente.
No desactivo Actualización de pantalla, para permitir ver el proceso de escritura, al mismo tiempo que progresa la barra roja del formulario.
En el ejemplo descargable he incrustado en la hoja un botón (no incluido en esta reconstrucción) que permite ejecutar el ejemplo.



En un libro nuevo.

Crea un Formulario:
Label1
Captión: “Actualizando. Por favor espere.”
Marco
Name: MarcoDeProgreso
Label2 (dentro del control Frame)
Name: EtiquetaDeProgreso
Caption: “ ” (cadena vacía)
BackColor: &H000000FF&
SpecialEffect: fmSpecialEffectRaised


Código en un módulo ordinario:

Sub MostrarFormulario()
UserForm1.Show
End Sub

Sub Principal()
Dim Contador As Integer
Dim FilaMax As Integer, ColMax As Integer
Dim f As Integer, c As Integer
Dim PctHecho As Single
' Inicializa variables.
Contador = 1
FilaMax = 200
ColMax = 50
' Escribe valores en las celdas.
For f = 1 To FilaMax
For c = 1 To ColMax
‘ Escribe un número aleatorio en una celda.
Cells(f, c) = Int(Rnd * 1000)
Contador = Contador + 1
Next c
' Actualiza el porcentaje realizado.
PctHecho = Contador / (FilaMax * ColMax) ' Llama a la subrutina que actualize la barra de progreso.
ActualizaBarraDeProgreso PctHecho
Next f
' Proceso terminado. Descarga el formulario.
Unload UserForm1
End Sub

Sub ActualizaBarraDeProgreso(PctHecho As Single)
With UserForm1
' Actualiza el título del marco (porcentaje procesado).
.MarcoDeProgreso.Caption = Format(PctHecho, "0%")
' Ancho de la etiqueta de progreso (barra).
.EtiquetaDeProgreso.Width = PctHecho * (.MarcoDeProgreso.Width - 10)
End With
' Cede el control al sistema, para procesar otros eventos.
DoEvents
End Sub

Código en el formulario:

Private Sub UserForm_Activate()
' Ajusta el ancho de la barra de progreso a 0.
UserForm1.EtiquetaDeProgreso.Width = 0
' Llama a la subrutina Principal.
Call Principal
End Sub

Volver arriba