Si tiene una macro de Microsoft Visual Basic para
Aplicaciones que tarda mucho tiempo en finalizar, quizás desee indicar al
usuario que la macro está progresando correctamente. En este artículo se
describe cómo crear una barra de progreso con un formulario de usuario en
Microsoft Excel.
Microsoft proporciona ejemplos de programación solamente como
ilustración, sin ninguna garantía ya sea expresa o implícita. Esto incluye,
entre otras, las garantías implícitas de comerciabilidad e idoneidad para un
fin determinado. En este artículo se da por supuesto que ya conoce el lenguaje
de programación que se muestra, así como las herramientas empleadas para crear
y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden
ayudar a explicar la funcionalidad de un procedimiento en particular. Sin
embargo, no modificarán estos ejemplos para proporcionar una funcionalidad
adicional ni crearán procedimientos que cumplan sus requisitos específicos.
Crear el formulario de usuario
En el ejemplo siguiente, una subrutina de Visual Basic rellena un
rango de celdas grande con un número aleatorio. El indicador muestra que la
macro se está ejecutando correctamente.
- Abra un nuevo libro en Excel.
- En Microsoft Office Excel 2003 y en versiones anteriores de
Excel, haga clic en Herramientas, seleccione
Macro y haga clic en Editor de Visual
Basic.
En Microsoft Office Excel 2007, haga clic en
Visual Basic en el grupo Código de la ficha
Programador.
Nota: para mostrar la ficha Programador en la cinta
de opciones, siga estos pasos:
- Inicie Excel 2007, haga clic en el Botón de
Microsoft Office y, a continuación, haga clic en Opciones de
Excel.
- En el cuadro de diálogo Opciones de
Excel, haga clic en Popular y, a continuación, haga
clic para activar la casilla Mostrar ficha Programador en la cinta de
opciones.
- En el menú Insertar, haga clic en UserForm.
- Dibuje un control Label en el formulario de usuario.
- Cambie las siguientes propiedades del control Label a los valores siguientes:
Contraer esta tablaAmpliar esta tabla
| Propiedad | Valor |
|---|
| Caption | Actualizando. Espere... |
Nota: si la ventana Propiedades no es visible, haga
clic en Ventana Propiedades en el menú
Ver. - Dibuje un control Frame en el formulario de usuario.
- Cambie las siguientes propiedades del control Frame a los valores siguientes:
Contraer esta tablaAmpliar esta tabla
| Propiedad | Valor |
|---|
| Name | AcFrameProgress |
- Dibuje un control Label en el control Frame.
- Cambie las siguientes propiedades del control Label a los valores siguientes:
Contraer esta tablaAmpliar esta tabla
| Propiedad | Valor |
| Name | LabelProgress |
| BackColor | &H000000FF& |
| SpecialEffect | fmSpecialEffectRaised |
Escribir el código de macro
- Haga doble clic en el formulario de usuario para abrir la
ventana Código del formulario.
- En el módulo, escriba el código siguiente para el evento
UserForm_Activate:
Private Sub UserForm_Activate()
' Set the width of the progress bar to 0.
UserForm1.LabelProgress.Width = 0
' Call the main subroutine.
Call Main
End Sub
- En el menú Insertar, haga clic en Módulo.
- En la ventana Código del módulo, escriba
el código siguiente:
Sub ShowUserForm()
UserForm1.Show
End Sub
Sub Main()
Dim Counter As Integer
Dim RowMax As Integer, ColMax As Integer
Dim r As Integer, c As Integer
Dim PctDone As Single
Application.ScreenUpdating = False
' Initialize variables.
Counter = 1
RowMax = 100
ColMax = 25
' Loop through cells.
For r = 1 To RowMax
For c = 1 To ColMax
'Put a random number in a cell
Cells(r, c) = Int(Rnd * 1000)
Counter = Counter + 1
Next c
' Update the percentage completed.
PctDone = Counter / (RowMax * ColMax)
' Call subroutine that updates the progress bar.
UpdateProgressBar PctDone
Next r
' The task is finished, so unload the UserForm.
Unload UserForm1
End Sub
Sub UpdateProgressBar(PctDone As Single)
With UserForm1
' Update the Caption property of the Frame control.
.FrameProgress.Caption = Format(PctDone, "0%")
' Widen the Label control.
.LabelProgress.Width = PctDone * _
(.FrameProgress.Width - 10)
End With
' The DoEvents allows the UserForm to update.
DoEvents
End Sub
- Vuelva a Excel.
- En Excel 2003 y versiones anteriores de Excel, seleccione
Macro en el menú Herramientas y haga clic en
Macros.
En Excel 2007, haga clic en
Macros en el grupo Código de la ficha
Programador. - En el cuadro de diálogo Macro, haga clic
para seleccionar ShowUserForm y, a continuación, haga clic en
Ejecutar.
Aparecerá un cuadro de diálogo que tiene una barra de progreso
roja. La barra de progreso aumenta a medida que la subrutina
Main rellena las celdas de la hoja de cálculo.
La
subrutina
ShowUserForm muestra el formulario de usuario. El
procedimiento asociado al evento
Activate del formulario de
usuario llama a la subrutina
Main. La subrutina
Main rellena las celdas con números aleatorios. Además, la
subrutina llama a la subrutina
UpdateProgressBar que actualiza
el control
Label del formulario de usuario.
Nota: cuando utiliza esta técnica, la macro tarda un poco más en
finalizar sus tareas previstas.