lunes, 16 de enero de 2012

Barra de Progreso

Una de las necesidades más comunes para un programador de Excel es indicar visualmente al usuario el progreso de la ejecución de una tarea y para ello utilizan la barra de progreso.

La barra de progreso es el elemento (normalmente representado por un formulario) que nos permiten mostrar de forma gráfica (parecido a un termómetro) el estado del avance de una tarea o proceso. Generalmente el gráfico está acompañado de información en forma de texto para medir con exactitud el avance.

Un indicador de progreso ralentiza un poco la ejecución de la macro, por eso si la rapidez de la macro es crucial en nuestro libro será mejor no utilizarla.

El siguiente procedimiento genera  mediante bucles una serie de números aleatorios, según se ejecutan realizan una serie de cambios en el formulario que hemos creado con anterioridad y que nos quedaría de la siguiente forma.


El  formulario Progreso contiene los siguientes elementos:
  • Control de marco (Frame1)
  • Control de etiqueta (Lavel1)  que simula la barra de progreso.
  • Control de etiqueta (Lavel2) opcional

En un modulo copiamos los siguientes procedimientos:

Sub GeneradorNumeros()
Const RowMax As Integer = 500
Const ColMax As Integer = 40

Dim Cuenta As Integer
Dim r As Integer, c As Integer
Dim Pct As Single

If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
    Cells.Clear
    For r = 1 To RowMax
        For c = 1 To ColMax
            Cells(r, c) = Int(Rnd * 49)
            Cuenta = Cuenta + 1
        Next c
        Pct = Cuenta / (RowMax * ColMax)
        Call Progreso(Pct)
    Next r
Unload UserForm1
End Sub

Sub Progreso(n)
With UserForm1
    .Frame1.Caption = Format(n, "0%")
    .Label1.Width = n * (.Frame1.Width - 10)
    .Repaint
End With
End Sub

Sub ShowDialog()
UserForm1.Label1.Width = 0
UserForm1.Show
End Sub

Insertamos el siguiente procedimiento en la ventana de código del UserForm1, este procedimiento solo invoca al generador de números y nos colorea la etiqueta (Lavel1) con el color del tema de nuestro libro.
Como os podéis dar cuenta este procedimiento se escribe en el evento Activate del formulario que se desencadena cuando se muestra el formulario.  

Private Sub UserForm_Activate()
UserForm1.Label1.BackColor = ActiveWorkbook.Theme. _
ThemeColorScheme.Colors(msoThemeAccent1)
Call GeneradorNumeros
End Sub

Para iniciar el proceso ejecutamos la macro ShowDialog desde el cuadro de dialogo de Macro en la ficha programador.

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.