Help and Support

Id. de artículo: 211736 - Última revisión: martes, 25 de marzo de 2008 - Versión: 4.1

Cómo mostrar una barra de progreso con un formulario de usuario en Excel

Para obtener una versión de este artículo para Microsoft Excel 97, vea 170782  (http://support.microsoft.com/kb/170782/ ) .

Idea del artículo enviada por: John Walkenbach

En esta página

Expandir todo | Contraer todo

Resumen

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.

Más información

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.
  1. Abra un nuevo libro en Excel.
  2. 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:
    1. Inicie Excel 2007, haga clic en el Botón de Microsoft Office y, a continuación, haga clic en Opciones de Excel.
    2. 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.
  3. En el menú Insertar, haga clic en UserForm.
  4. Dibuje un control Label en el formulario de usuario.
  5. Cambie las siguientes propiedades del control Label a los valores siguientes:
    Contraer esta tablaAmpliar esta tabla
    PropiedadValor
    CaptionActualizando. Espere...
    Nota: si la ventana Propiedades no es visible, haga clic en Ventana Propiedades en el menú Ver.
  6. Dibuje un control Frame en el formulario de usuario.
  7. Cambie las siguientes propiedades del control Frame a los valores siguientes:
    Contraer esta tablaAmpliar esta tabla
    PropiedadValor
    NameAcFrameProgress
  8. Dibuje un control Label en el control Frame.
  9. Cambie las siguientes propiedades del control Label a los valores siguientes:
    Contraer esta tablaAmpliar esta tabla
    PropiedadValor
    NameLabelProgress
    BackColor&H000000FF&
    SpecialEffectfmSpecialEffectRaised

Escribir el código de macro

  1. Haga doble clic en el formulario de usuario para abrir la ventana Código del formulario.
  2. 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
    					
  3. En el menú Insertar, haga clic en Módulo.
  4. 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
    					
  5. Vuelva a Excel.
  6. 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.
  7. 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.

La información de este artículo se refiere a:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
Palabras clave: 
kbinfo kbexpertisebeginner kbcode kbhowto kbmacro KB211736

Seleccione idioma