Een voortgangsbalk weergeven met een gebruikersformulier in Excel

Samenvatting

Als u een Microsoft Visual Basic for Applications-macro hebt die lang duurt om te voltooien, kunt u de gebruiker een indicatie geven dat de macro correct wordt uitgevoerd. In dit artikel wordt beschreven hoe u een voortgangsbalk maakt met een gebruikersformulier in Microsoft Excel.

Meer informatie

Microsoft verstrekt deze code zonder enige expliciete of impliciete garantie, daaronder mede begrepen, maar niet beperkt tot impliciete garanties met betrekking tot de verkoopbaarheid en/of geschiktheid voor een bepaald doel. In dit artikel wordt ervan uitgegaan dat u bekend bent met de programmeertaal VBScript, alsmede met de hulpprogramma's waarmee procedures worden gemaakt en waarmee fouten in procedures worden opgespoord. Ondersteuningsmedewerkers van Microsoft kunnen helpen bij de uitleg over de functionaliteit van een bepaalde procedure. Deze medewerkers zullen de voorbeelden echter niet aanpassen om extra functionaliteit toe te voegen of om procedures te maken die aan uw specifieke eisen voldoen.

Het gebruikersformulier maken

In het volgende voorbeeld vult een Visual Basic-subroutine een groot celbereik met een willekeurig getal. De indicator geeft aan dat de macro correct wordt uitgevoerd.

  1. Open een nieuwe werkmap in Excel.

  2. Klik in Microsoft Office Excel 2003 en in eerdere versies van Excel op Extra, wijs Macro aan en klik vervolgens op Visual Basic Editor.

    Klik in Microsoft Office Excel 2007 op Visual Basic in de groep Code op het tabblad Ontwikkelaars .

    Opmerking Voer de volgende stappen uit om het tabblad Ontwikkelaars op het lint weer te geven:

    1. Start Excel 2007, klik op de Microsoft Office-knop en klik vervolgens op Opties voor Excel.
    2. Klik in het dialoogvenster Opties voor Excel op Populair en klik vervolgens om het tabblad Ontwikkelaars weergeven in het lint in te schakelen.
  3. Klik in het menu Invoegen op UserForm.

  4. Teken een besturingselement Label op het gebruikersformulier.

  5. Wijzig de volgende eigenschappen van het besturingselement Label in de volgende waarden: | Eigenschap| Waarde| |---------------|-----------------------------| | Bijschrift| Wordt nu bijgewerkt. Een ogenblik geduld...| Opmerking Als het venster Eigenschappen niet zichtbaar is, klikt u op Het venster Eigenschappen in het menu Beeld .

  6. Teken een besturingselement Frame op het gebruikersformulier.

  7. Wijzig de volgende eigenschappen van het besturingselement Frame in de volgende waarden: | Eigenschap | Waarde| |---------|--------------------| | Naam FrameProgress|

  8. Teken een besturingselement Label op het besturingselement Frame.

  9. Wijzig de volgende eigenschappen van het besturingselement Label in de volgende waarden: | Eigenschap| Waarde| |----------|---------------------------| | Naam | LabelProgress| | BackColor-|& H0000000FF&| | SpecialEffect |fmSpecialEffectRaised|

Typ de macrocode

  1. Dubbelklik op het gebruikersformulier om het codevenster voor het gebruikersformulier te openen.

  2. Typ in de module de volgende code voor de UserForm_Activate gebeurtenis:

    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. Klik op Module in het menu Invoegen.

  4. Typ de volgende code in het codevenster voor de module:

    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. Ga terug naar Excel.

  6. Wijs in Excel 2003 en in eerdere versies van Excel Macro aan in het menu Extra en klik vervolgens op Macro's.

    Klik in Excel 2007 op Macro's in de groep Code op het tabblad Ontwikkelaars .

  7. Klik in het dialoogvenster Macro om ShowUserForm te selecteren en klik vervolgens op Uitvoeren.

Er wordt een dialoogvenster weergegeven met een rode voortgangsbalk. De voortgangsbalk neemt toe naarmate de hoofdsubroutine de cellen in het werkblad vult.

In de subroutine ShowUserForm wordt het gebruikersformulier weergegeven. De procedure die is gekoppeld aan de gebeurtenis Activate van het gebruikersformulier roept de hoofdsubroutine aan. De hoofdsubroutine vult cellen met willekeurige getallen. Daarnaast roept de subroutine de subroutine UpdateProgressBar aan waarmee het besturingselement Label op het gebruikersformulier wordt bijgewerkt.

Opmerking Wanneer u deze techniek gebruikt, duurt het even voordat de macro de beoogde taken heeft voltooid.