
En esta publicación, aprenderemos cómo mostrar una barra de progreso con un UserForm en Excel y VBA.
Rol de la barra de progreso
Si tiene un rastreador, panel o aplicación automatizado basado en VBA que tarda mucho tiempo en finalizar la actividad, entonces la indicación del progreso es obligatoria; de lo contrario, el usuario no podrá comprender si se está realizando alguna tarea o si el sistema no responde.
Con la ayuda de la barra de progreso, el usuario puede seguir el progreso de una operación prolongada y obtener información sobre la operación en curso y cuánto porcentaje aproximado de la tarea se ha realizado.
Entonces, considerando la usabilidad de la barra de progreso, debemos incluirla en la automatización compleja o en los trabajos basados en VBA donde necesitamos mostrar el progreso de una tarea.
Demostración de la barra de progreso

Como la barra de progreso muestra el% de finalización de una tarea, agregué un botón en la página de inicio para que cada vez que el usuario haga clic en él, insertará 100 nuevas hojas de trabajo, cambiará el nombre de todas las hojas de trabajo y agregará 10 encabezados de columnas diferentes en la primera fila de cada hoja.
Al realizar todas estas actividades, llevará algún tiempo, por lo que podemos mostrar el% de finalización con la ayuda de la barra de progreso para el propósito de la demostración.
Entonces, este es solo un ejemplo para mostrar la barra de progreso. Puede utilizar la misma lógica en su proyecto real.
Creación del formulario de usuario para la barra de progreso en VBA
- Abra un nuevo libro de trabajo en Excel.
- Guarde el archivo con el nombre «Barra de progreso» con extensión habilitada para macros.
- Cambie el nombre de Sheet1 a ‘Hogar’ e inserte un rectángulo redondeado con la leyenda ‘Insertar hojas de trabajo’.
- Vaya a la ventana de la aplicación Visual Basic. Para hacer eso, simplemente haga clic en la pestaña Desarrollador y luego haga clic en el botón VBA disponible en el grupo Código. Alternativamente, puede presionar ALT + F11 como tecla de método abreviado.
- En el menú Insertar, haga clic en UserForm.
- Cambie las siguientes propiedades de UserForm:
Nombre: frmProgressForm | Subtítulo: Progreso | Altura: 86 | Ancho: 278 | ShowModal: Falso - Inserte un control Frame en UserForm.
- Cambie las siguientes propiedades del control Frame a los siguientes valores:
Nombre: FrameProgress | Subtítulo : 0% | Altura : 42 | Ancho : 252 - Inserte un control de etiqueta en UserForm en Frame.
- Cambie las siguientes propiedades del control Etiqueta a los siguientes valores:
Nombre: lblProgress | Subtítulo : NULO | Color de espalda: Azul | Altura : 18 | Ancho : 240 | Efecto especial:1-frmSpecialEffectRaised
Ahora, hemos terminado con el diseño del formulario y la barra de progreso.

Escribir código VBA
Insertemos un módulo para escribir el código. Para insertar un módulo, haga clic en el menú Insertar y luego haga clic en el módulo.
Pasemos a la ventana de código del módulo.
Aquí, necesitamos escribir un subprocedimiento para insertar 100 nuevas hojas de trabajo en el libro de trabajo y cambiar el nombre de todas las hojas con el patrón de nomenclatura ‘Hoja personalizada 1… 2… 3… ”y luego crear 10 encabezados de columna en todas las hojas recién insertadas.
Mientras realizamos todas las operaciones, calcularemos el% de finalización y luego aumentaremos el ancho de la etiqueta para mostrar el progreso de la tarea.
Sub ProcessActivity () Dim iStart As Integer ‘variable para inicializar el bucle for Dim iTotalSheet As Integer’ Número de hojas necesarias para insertar Dim pctDone As Single ‘para mantener la terminación% Dim iLabelWidth As Integer’ Para almacenar el ancho de la etiqueta ‘Inicializar variables iTotalSheet = 100 iLabelWidth = 240 ‘Ancho de etiqueta’ Bucle para insertar hojas de trabajo y agregar encabezados de columna Para iStart = 1 To iTotalSheet Sheets.Add (After: = Sheets (Sheets.Count)). Name = «Custom Sheet» & amp; iStart Sheets (Sheets.Count) .Range («A1»). Value = «Column 1» Sheets (Sheets.Count) .Range («B1»). Value = «Column 2» Sheets (Sheets.Count) .Range ( «C1»). Valor = «Columna 3» Hojas (Hojas.Cuenta) .Rango («D1»). Valor = «Columna 4» Hojas (Hojas.Cuenta) .Rango («E1»). Valor = «Columna 5» «Hojas (Sheets.Count) .Range (» F1 «). Value =» Columna 6 «Sheets (Sheets.Count) .Range (» G1 «). Value =» Column 7 «Sheets (Sheets.Count) .Range ( «H1»). Valor = «Columna 8» Hojas (Hojas.Cuenta) .Rango («I1»). Valor = «Columna 9» Hojas (Hojas.Cuenta) .Rango («J1»). Valor = «Columna 10» «‘Calcule el porcentaje completado y asígnelo a la variable pctDone pctDone = iStart / iTotalSheet’ Código para aumentar el ancho de las etiquetas y actualizar el título del marco de acuerdo con la finalización de la tarea% Con frmProgressForm .lblProgress.Width = pctDone * iLabelWidth .FrameProgress.Caption = Formato (pctDone, «0%») Finalizar con DoEvents ‘El DoEvents permite que el formulario de usuario se actualice Siguiente iStart Descargar frmProgressForm’ Cerrar el formulario End Sub
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
Sub Actividad de proceso()
Oscuro empiezo Como Entero ‘variable a inicializar la por lazo Oscuro iTotalSheet Como Entero ‘Número de hojas requerido a insertar Oscuro pctDone Como Único ‘a sostener la terminación% Oscuro iLabelWidth Como Entero ‘A Tienda la ancho de etiqueta
‘Inicializar variables iTotalSheet = 100
iLabelWidth = 240 ‘Ancho de etiqueta
‘Bucle para insertar hojas de trabajo y agregar encabezados de columna
Para empiezo = 1 A iTotalSheet
Hojas.Agregar(Después:=Hojas(Hojas.Contar)).Nombre = «Hoja personalizada» Yamperio; empiezo
Hojas(Hojas.Contar).Abarcar(«A1»).Valor = «Columna 1» Hojas(Hojas.Contar).Abarcar(«B1»).Valor = «Columna 2» Hojas(Hojas.Contar).Abarcar(«C1»).Valor = «Columna 3» Hojas(Hojas.Contar).Abarcar(«D1»).Valor = «Columna 4» Hojas(Hojas.Contar).Abarcar(«E1»).Valor = «Columna 5» Hojas(Hojas.Contar).Abarcar(«F1»).Valor = «Columna 6» Hojas(Hojas.Contar).Abarcar(«G1»).Valor = «Columna 7» Hojas(Hojas.Contar).Abarcar(«H1»).Valor = «Columna 8» Hojas(Hojas.Contar).Abarcar(«I1»).Valor = «Columna 9» Hojas(Hojas.Contar).Abarcar(«J1»).Valor = «Columna 10»
‘calcular el porcentaje completado y asignarlo a la variable pctDone pctDone = empiezo / iTotalSheet
‘Código para aumentar el ancho de las etiquetas y actualizar el título del marco de acuerdo con el% de finalización de la tarea Con frmProgressForm
.lblProgress.Ancho = pctDone * iLabelWidth .FrameProgress.Subtítulo = Formato(pctDone, «0%»)
Fin Con
DoEvents ‘Los DoEvents permiten que el UserForm se actualice
Próximo empiezo
Descargar frmProgressForm ‘Cerrando el formulario
Fin Sub |
Escribamos un subprocedimiento para mostrar la forma. Utilizaremos esto mientras asignamos macro en el botón disponible en Hogar hoja de cálculo.
Sub Show_Form () frmProgressForm.Show End Sub
Sub Show_Form() frmProgressForm.mostrar Fin Sub |
Ahora, muevamos el código de formulario viudo y llamemos al ‘Actividad de proceso‘procedimiento en formulario activar evento.
Private Sub UserForm_Activate () ‘Establecer el ancho de la etiqueta de la barra de progreso en 0 Me.lblProgress.Width = 0’ Llamar al procedimiento para insertar hojas de trabajo y crear encabezados de columna Llamar ProcessActivity End Sub
Privado Sub UserForm_Activate() ‘Establezca el ancho de la etiqueta de la barra de progreso en 0 Me.lblProgress.Ancho = 0 ‘Llame al procedimiento para insertar hojas de trabajo y crear encabezados de columna Llamada Actividad de proceso Fin Sub |
Ahora, hemos terminado con el diseño y la codificación de la barra de progreso UserForm. Pasemos a la ventana de Excel y asignemos la macro en el botón.
Para asignar la macro, hagamos clic derecho en el botón y luego haga clic en ‘Asignar macro …’ Seleccione el ‘Show_Form’ del nombre de la macro y luego haga clic en Aceptar.

Ahora, hemos terminado con la asignación de macros. Puede hacer clic en el botón para insertar hojas y mostrar la barra de progreso.
Por favor mira paso a paso Youtube tutorial para desarrollar Progress Bar en Excel y VBA.
Entonces, esto se trata de la barra de progreso en Excel y VBA. Si tiene alguna pregunta, siempre puede preguntarme en la sección de comentarios o enviarnos un correo electrónico a info@thedatalabs.org
Haga clic en el botón de abajo para descargar el archivo de práctica junto con el código VBA.
