Jak wyświetlić pasek postępu z formularzem użytkownika w programie Excel
Podsumowanie
Jeśli masz makro Visual Basic for Applications firmy Microsoft, które zajmuje dużo czasu, możesz wskazać użytkownikowi, że makro postępuje prawidłowo. W tym artykule opisano sposób tworzenia paska postępu przy użyciu formularza użytkownika w programie Microsoft Excel.
Więcej informacji
Firma Microsoft podaje przykłady programowania tylko dla celów ilustracyjnych, nie udzielając żadnej rękojmi, wyrażonej wprost ani dorozumianej, w tym także, ale nie tylko, dorozumianej rękojmi co do przydatności handlowej lub do określonych celów. W tym artykule zakłada się, że czytelnik zna demonstrowany język programowania oraz narzędzia używane do tworzenia i debugowania procedur. Wykwalifikowani pracownicy Pomocy technicznej firmy Microsoft mogą pomóc w wyjaśnieniu działania określonej procedury. Nie będą oni jednak modyfikować tych przykładów w celu dodania funkcji ani konstruować nowych procedur celem dostosowania ich do potrzeb użytkownika.
Tworzenie formularza użytkownika
W poniższym przykładzie podprogram Języka Visual Basic wypełnia duży zakres komórek liczbą losową. Wskaźnik pokazuje, że makro działa poprawnie.
Otwórz nowy skoroszyt w programie Excel.
W programie Microsoft Office Excel 2003 i we wcześniejszych wersjach programu Excel kliknij pozycję Narzędzia, wskaż pozycję Makro, a następnie kliknij pozycję Edytor Visual Basic.
W programie Microsoft Office Excel 2007 kliknij pozycję Visual Basic w grupie Kod na karcie Deweloper .
Uwaga Aby wyświetlić kartę Deweloper na wstążce, wykonaj następujące kroki:
- Uruchom program Excel 2007, kliknij przycisk Microsoft Office, a następnie kliknij pozycję Opcje programu Excel.
- W oknie dialogowym Opcje programu Excel kliknij pozycję Popularne, a następnie kliknij, aby zaznaczyć kartę Pokaż dewelopera na wstążce .
W menu Wstaw kliknij pozycję UserForm.
Narysuj kontrolkę Etykieta w formularzu użytkownika.
Zmień następujące właściwości kontrolki Etykieta na następujące wartości: | Właściwość| Wartość| |---------------|-----------------------------| | Podpis| Teraz trwa aktualizowanie. Czekaj...| Uwaga Jeśli okno Właściwości nie jest widoczne, kliknij pozycję Okno właściwości w menu Widok .
Narysuj kontrolkę Ramka w formularzu użytkownika.
Zmień następujące właściwości kontrolki Ramka na następujące wartości: | | właściwości Wartość| |---------|--------------------| | Nazwa FrameProgress|
Narysuj kontrolkę Etykieta na kontrolce Ramka.
Zmień następujące właściwości kontrolki Etykieta na następujące wartości: | Właściwość| Wartość| |----------|---------------------------| | | nazw LabelProgress| | BackColor |& H000000FF&| | SpecialEffect |fmSpecialEffectRaised|
Wpisz kod makra
Kliknij dwukrotnie formularz użytkownika, aby otworzyć okno Kod formularza użytkownika.
W module wpisz następujący kod zdarzenia 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
W menu Wstaw kliknij polecenie Moduł.
W oknie Kod modułu wpisz następujący kod:
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
Wróć do programu Excel.
W programie Excel 2003 i we wcześniejszych wersjach programu Excel wskaż pozycję Makro w menu Narzędzia , a następnie kliknij pozycję Makra.
W programie Excel 2007 kliknij pozycję Makra w grupie Kod na karcie Deweloper .
W oknie dialogowym Makro kliknij, aby wybrać pozycję ShowUserForm, a następnie kliknij przycisk Uruchom.
Zostanie wyświetlone okno dialogowe z czerwonym paskiem postępu. Pasek postępu zwiększa się, gdy podprogram Main wypełnia komórki w arkuszu.
Podprogram ShowUserForm pokazuje formularz użytkownika. Procedura dołączona do zdarzenia Aktywuj formularza użytkownika wywołuje podprogram Main . Podprogram Main wypełnia komórki liczbami losowymi. Ponadto podprogram wywołuje podprocedułę UpdateProgressBar , która aktualizuje kontrolkę Etykieta w formularzu użytkownika.
Uwaga W przypadku korzystania z tej techniki makro zajmuje nieco więcej czasu, aby ukończyć zamierzone zadania.