/ / Wskaźnik postępu w Excel VBA

Wskaźnik postępu w Excel VBA

Poniżej przyjrzymy się programowi w Excel VBA który tworzy wskaźnik postępu. Utrzymaliśmy wskaźnik postępu tak prosty, jak to tylko możliwe, ale wygląda profesjonalnie.

Forma użytkownika, którą utworzymy, wygląda następująco:

Wskaźnik postępu w Excel VBA

Aby utworzyć tę Userform, wykonaj następujące kroki.

1. Otwórz Edytor Visual Basic. Jeśli Eksplorator projektu nie jest widoczny, kliknij opcję Widok, Eksplorator projektu.

2. Kliknij Wstaw, Formularz użytkownika. Jeśli Zestaw narzędzi nie pojawi się automatycznie, kliknij opcję Widok, Przybornik. Twój ekran powinien być ustawiony jak poniżej.

Konfiguracja ekranu Userform w programie Excel VBA

Ten formularz użytkownika składa się tylko z trzech elementów sterujących. Sterowanie ramą i dwie kontrolki etykiet.

3. Dodaj kontrolkę ramki. Możesz to zrobić, klikając Ramka z Przybornika. Następnie możesz przeciągnąć kontrolkę ramki w Userform. Musisz zmienić niektóre właściwości tego sterowania ramkami. Kliknij prawym przyciskiem myszy kontrolkę ramki, a następnie kliknij polecenie Właściwości. Opróżnij pole Podpis, ustaw Wysokość na 24 i Szerokość na 204.

4. Dodaj pierwszą kontrolkę etykiety i umieść ją w kontrolce Ramka. Kliknij prawym przyciskiem myszy kontrolkę etykiety, a następnie kliknij Właściwości. Zmień nazwę na Bar, BackColor na Highlight, opróżnij pole Podpis, ustaw Wysokość na 20 i Szerokość na 10.

5. Dodaj drugą kontrolkę etykiety i umieść ją nad formantem Ramka. Kliknij prawym przyciskiem myszy kontrolkę etykiety, a następnie kliknij Właściwości. Zmień nazwę na Tekst i zmień Podpis na "0% Ukończono".

6. Zmień podpis Userform na Progress Indicator.

Po zakończeniu, wynik powinien być zgodny z obrazem formularza użytkownika pokazanym wcześniej.

7. Umieść przycisk polecenia w arkuszu i dodaj następujący wiersz kodu, aby wyświetlić formularz Userform:

Private Sub CommandButton1_Click()

UserForm1.Show

End Sub

Jeśli przeszedłeś przez inną Userformprzykłady na tej stronie, wiesz, że nadszedł czas, aby utworzyć Sub UserForm_Initialize. Sub ten działa automatycznie po załadowaniu formularza użytkownika. Tak więc, gdy użyjesz metody Show dla Userform, kod zostanie automatycznie wykonany. Zamiast Sub UserForm_Initialize tworzymy Sub UserForm_Activate. Korzystając z tego sub, Excel VBA może zaktualizować Userform, aby pokazać postęp makra.

8. Otwórz Edytor Visual Basic.

9. W oknie Project Explorer kliknij prawym przyciskiem myszy UserForm1, a następnie kliknij View Code.

10. Wybierz Userform z lewej listy rozwijanej. Wybierz Aktywuj z prawej listy rozwijanej.

11. Dodaj następującą linię kodu:

Private Sub UserForm_Activate()

code

End Sub

Wyjaśnienie: ten sub wywołuje inny sub-kod, który zamierzamy stworzyć za minutę. Zmieszany? Możesz przejść do rozdziału "Funkcja i podrzędny", aby dowiedzieć się więcej o subsach. Jeśli się spieszysz, po prostu wykonaj następujące kroki, a wszystko będzie dobrze.

12. Umieść podany kod w module (w Edytorze Visual Basic kliknij Wstaw, Moduł). To tylko przykład. To jest miejsce do dodawania własnego kodu, gdy chcesz użyć tego wskaźnika postępu dla własnego makra. Kod wygląda następująco.

Sub code()

Dim i As Integer, j As Integer, pctCompl As Single

Sheet1.Cells.Clear

For i = 1 To 100
    For j = 1 To 1000
        Cells(i, 1).Value = j
    Next j
    pctCompl = i
    progress pctCompl
Next i

End Sub

Objaśnienie: najpierw zainicjujemy niektóre zmienne. Następnie wyczyścimy arkusz1. Używamy podwójnej pętli, aby pokazać wartości od 1 do 1000 w pierwszych 100 wierszach arkusza roboczego. Dzięki temu Excel VBA będzie zajęty przez pewien czas i da nam możliwość zobaczenia postępu makra. Zmienna pctCompl (skrót percentCompleted) mierzy postęp makra. Na koniec wywołujemy inny sub-nazwany postęp i przekazujemy wartość zmiennej pctCompl, aby zaktualizować Userform. W ten sposób możemy zobaczyć postęp makra!

13. Dodaj kolejny podtytułowy postęp. Kod wygląda następująco:

Sub progress(pctCompl As Single)

UserForm1.Text.Caption = pctCompl & "% Completed"
UserForm1.Bar.Width = pctCompl * 2

DoEvents

End Sub

Objaśnienie: pierwsza linia kodu zmienia podpis pierwszej kontrolki etykiety. Druga linia kodu zmienia szerokość drugiego elementu sterującego etykietą. Dodaj DoEvents, aby zaktualizować Userform.

14. Wyjdź z Edytora Visual Basic i kliknij przycisk polecenia na arkuszu:

Wynik:

Wskaźnik postępu

Uwaga: dla tego makro użyliśmy zmiennej i, aby zmierzyć postęp. Na przykład w rzędzie 11 10% jest zakończone. To może być inne dla twojego makra. Technika przekazywania wartości zmiennej pctCompl do sub postu w celu zaktualizowania Userform pozostaje taka sama.

Przeczytaj również: