Easy Macro #6: Barra de progreso en VBA Excel.

Una cualidad que tienen las macros es la de poder realizar distintas tareas de manera automática dentro del entorno Excel (y muchas veces fuera de) pero a veces es difícil decirle al usuario de forma grafica en que punto de nuestro desarrollo nos encontramos corriendo la macro.

Es por eso que el día de hoy vamos a ver como programar una barra de progreso en VBA de forma muy sencilla para agregarla a nuestras macros.

Puedes descargar un libro de ejemplo puchandole aqui.

1. Como llamar a la barra de progreso.

Vamos a realizar esta acción en pasos para que nos sea mas fácil de entender.

– Abrimos cualquier libro de Excel y nos dirigimos a la ficha “Desarrollador” y de ahí abrimos Visual Basic (también puedes hacerlo con ALT+F11).

– Una vez dentro, insertaremos una UserForm dentro del libro de trabajo, para ello vamos a presionar click derecho sobre cualquier parte de nuestro proyecto y en la opción Insertar seleccionaremos UserForm.

– Aquí el paso importante. Con la UserForm activada seleccionaremos primero la barra de herramientas y, dando click derecho sobre ella, iremos a la opción “controles adicionales”.

vba_excel_controles_adicionales_userform

– Ahora, vamos a buscar la opción que se llama Barra de Progreso y saldremos del cuadro de dialogo. Nos aparecerá un nuevo botón a agregar como se muestra a continuación.

vba excel añadir barra de progreso

– Dibujamos nuestra nueva barra de progreso y continuamos.

vba excel barra de progreso

2. Usar la barra de progreso.

Dentro de las propiedades de la barra de progreso veremos que existen 2 valores, MAX y MIN. Gracias a estos valores, Excel puede saber que tan llena o vacia debe de estar la barra. Para modificar el llenado de una barra bastara con ingresar a su propiedad .value y seleccionar que tanto debe de estar llena.

vba excel propiedades barra de progreso

Un ejemplo fácil de esto seria meterla con un contador de tiempo, mismo que servirá para que cuando abramos la UserForm la barra se vaya llenando. Primero crea una UserForm como la que te muestro abajo.

vba excel barra de progreso ejemplo 1

¡Excelente! Dentro del código de la UserForm puedes escribir lo siguiente para ver como funciona.

Private Sub UserForm_Initialize()
ProgressBar1.Value = 0
End Sub
Private Sub CommandButton1_Click()
Dim alpha, delta, omega As Single
alpha = Timer()
Do Until delta >= 100
    omega = Timer()
    delta = delta + (omega - alpha)
    If delta >= 100 Then
        ProgressBar1.Value = 100
    Else
        ProgressBar1.Value = delta
    End If
Loop
MsgBox "Carga lista"
End Sub

Algo que también podría funcionar es hacer el proceso inverso, ósea que la barra vaya hacia atrás para figurar como si estuviera borrando algo. Para ello, vamos a agregar un nuevo botón de comando que haga el proceso inverso.

vba excel barra de progreso ejemplo 2

Cuando lo tengamos, el código seria parecido a esto.

Private Sub CommandButton2_Click()
Dim alpha, delta, omega As Single
delta = 100
ProgressBar1.Value = delta
alpha = Timer()
Do Until delta <= 0
    omega = Timer()
    delta = delta - (omega - alpha)
    If delta <= 0 Then
        ProgressBar1.Value = 0
    Else
        ProgressBar1.Value = delta
    End If
Loop
MsgBox "Borrado listo"
End Sub

¡Ahora tienes una barra de progreso super CUTE para presumir a tus amigos! Añádela a tus mejores desarrollos y sorprende a todos informándoles cuanto le falta a tu macro para terminar.

Cualquier duda nos leemos abajo.

Easy Macro #6: Barra de progreso en VBA Excel.

4 comentarios en «Easy Macro #6: Barra de progreso en VBA Excel.»

  1. Este es el código, solo que no lo hace hasta la D sino que lo hace hasta la columna AH. No puedo encontrar donde pegar el código

    Graciasssss

    ‘ Difine el numero de filas

    Range(«AS1»).Select

    ActiveCell.FormulaR1C1 = «=COUNTA(Datos!C[-42])»

    ‘ va pegando las formulas 1 x 1 dependiendo la fila

    Range(«A2»).Select

    ActiveCell.FormulaR1C1 = «=IF(Datos!RC=»»»»,»»»»,Datos!RC)»

    Range(«B2»).Select

    ActiveCell.FormulaR1C1 = _

    «=IFERROR(IF(RC[10]=»»Repactado»»,»»Repactado»»,(VLOOKUP(RC[-1],Segmentos!R1C1:R25C2,2,))),»»Sin Segmento»»)»

    Range(«C2»).Select

    ActiveCell.FormulaR1C1 = «=IF(Datos!RC[-1]=»»»»,»»»»,Datos!RC[-1])»

    Range(«D2»).Select

    ActiveCell.FormulaR1C1 = «=IF(Datos!RC[-1]=»»»»,»»»»,Datos!RC[-1])»

    ‘dimenciona la formula que cuenta la cantidad de registros de la hoja datos

    Dim Rango_Filas As String

    Rango_Filas = [AS1].Value

    Empieza a arrastrar hacia abajo la cantidad de filas necesarias.

    Dim filaA As String

    filaA = «A2:A» & Rango_Filas

    Range(«A2»).Select

    Selection.AutoFill Destination:=Range(filaA)

    Dim filaB As String

    filaB = «B2:B» & Rango_Filas

    Range(«B2»).Select

    Selection.AutoFill Destination:=Range(filaB)

    Dim filaC As String

    filaC = «C2:C» & Rango_Filas

    Range(«C2»).Select

    Selection.AutoFill Destination:=Range(filaC)

    Dim filaD As String

    filaD = «D2:D» & Rango_Filas

    Range(«D2»).Select

    Selection.AutoFill Destination:=Range(filaD)

    ‘ copia toda la informacion y la pega como datos.

    Cells.Select

    Selection.Copy

    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

    :=False, Transpose:=False

    Application.CutCopyMode = False

  2. Buenos días! Quería consultarte, ya que tengo un código bastante largo que lo único que hace es convertir y dar formato a 30k filas en otra hoja, ka cual les aplica fórmulas y genera otras. Luego dimensiona el autofill dependiendo la cantidad de filas y las arrastra.

    No encuentro donde debería pegar mi código entero, para que vaya contando.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll hacia arriba