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.
Open een nieuwe werkmap in Excel.
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:
- Start Excel 2007, klik op de Microsoft Office-knop en klik vervolgens op Opties voor Excel.
- Klik in het dialoogvenster Opties voor Excel op Populair en klik vervolgens om het tabblad Ontwikkelaars weergeven in het lint in te schakelen.
Klik in het menu Invoegen op UserForm.
Teken een besturingselement Label op het gebruikersformulier.
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 .
Teken een besturingselement Frame op het gebruikersformulier.
Wijzig de volgende eigenschappen van het besturingselement Frame in de volgende waarden: | Eigenschap | Waarde| |---------|--------------------| | Naam FrameProgress|
Teken een besturingselement Label op het besturingselement Frame.
Wijzig de volgende eigenschappen van het besturingselement Label in de volgende waarden: | Eigenschap| Waarde| |----------|---------------------------| | Naam | LabelProgress| | BackColor-|& H0000000FF&| | SpecialEffect |fmSpecialEffectRaised|
Typ de macrocode
Dubbelklik op het gebruikersformulier om het codevenster voor het gebruikersformulier te openen.
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
Klik op Module in het menu Invoegen.
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
Ga terug naar Excel.
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 .
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.