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.

  1. Otwórz nowy skoroszyt w programie Excel.

  2. 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:

    1. Uruchom program Excel 2007, kliknij przycisk Microsoft Office, a następnie kliknij pozycję Opcje programu Excel.
    2. W oknie dialogowym Opcje programu Excel kliknij pozycję Popularne, a następnie kliknij, aby zaznaczyć kartę Pokaż dewelopera na wstążce .
  3. W menu Wstaw kliknij pozycję UserForm.

  4. Narysuj kontrolkę Etykieta w formularzu użytkownika.

  5. 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 .

  6. Narysuj kontrolkę Ramka w formularzu użytkownika.

  7. Zmień następujące właściwości kontrolki Ramka na następujące wartości: | | właściwości Wartość| |---------|--------------------| | Nazwa FrameProgress|

  8. Narysuj kontrolkę Etykieta na kontrolce Ramka.

  9. 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

  1. Kliknij dwukrotnie formularz użytkownika, aby otworzyć okno Kod formularza użytkownika.

  2. 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
    
    
  3. W menu Wstaw kliknij polecenie Moduł.

  4. 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
    
    
  5. Wróć do programu Excel.

  6. 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 .

  7. 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.