Pasek stanu VBA - Jak włączyć pasek statusu za pomocą kodu VBA?

Pasek stanu programu Excel VBA

StatusBar jest właściwością vba, która służy do wyświetlania statusu kodu zakończonego lub ukończonego w momencie wykonania, jest wyświetlany w lewym rogu arkusza roboczego, gdy wykonywane jest makro, a status jest wyświetlany w procentach do użytkownika.

Gdy makro działa w tyle, frustrujące jest czekanie bez wiedzy, ile to potrwa. Jeśli jesteś na etapie, na którym kod jest uruchomiony, możesz przynajmniej obliczyć, ile czasu to zajmie. Tak więc chodzi o to, aby pasek stanu pokazywał procent pracy wykonanej do tej pory, jak poniżej.

Co to jest Application.StatusBar?

Application.StatusBar to właściwość, której możemy użyć w kodowaniu makr, aby pokazać stan, gdy makro działa za sceną.

To nie jest tak piękne, jak nasz „Pasek postępu VBA”, ale wystarczająco dobre, aby poznać stan projektu makr.

Przykład tworzenia StatusBar za pomocą VBA

Wykonaj poniższe czynności, aby utworzyć pasek stanu.

Krok 1: Najpierw zdefiniuj zmienną VBA, aby znaleźć ostatnio używany wiersz w arkuszu.

Kod:

Sub Status_Bar_Progress () Dim LR As Long End Sub

Krok 2: Znajdź ostatnio używany wiersz za pomocą poniższego kodu.

Kod:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1) .End (xlUp) .Row End Sub

Krok 3: Następnie musimy zdefiniować zmienną, która będzie zawierała liczbę wyświetlanych słupków.

Kod:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1) .End (xlUp) .Row Dim NumOfBars As Integer End Sub

Spowoduje to zatrzymanie liczby pasków, które mogą być wyświetlane na pasku stanu.

Krok 4: Dla tej zmiennej zapisz limit słupka jako 45.

Kod:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1) .End (xlUp) .Row Dim NumOfBars As Integer NumOfBars = 45 End Sub

Krok 5: Zdefiniuj jeszcze dwie zmienne, aby zachować aktualny stan i procent wykonania, gdy makro jest uruchomione.

Kod:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1) .End (xlUp) .Row Dim NumOfBars As Integer NumOfBars = 45 Dim PresentStatus As Integer Dim Percetage Ukończono jako Integer End Sub

Krok 6: Teraz, aby włączyć pasek stanu, użyj poniższego kodu.

Kod:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1) .End (xlUp) .Row Dim NumOfBars As Integer NumOfBars = 45 Dim PresentStatus As Integer Dim PercetageCompleted As Integer Application.StatusBar = "(" Spacja & Spacja ( NumOfBars) & „)” End Sub

To spowoduje dodanie nawiasu (() i dodanie 45 spacji przed końcem tekstu nawiasem zamykającym ()).

Uruchom kod, a zobaczymy poniżej na pasku stanu programu Excel VBA.

Wynik:

Krok 7: Teraz musimy uwzględnić pętlę For Next w VBA, aby obliczyć procent makra, które zostało ukończone. Zdefiniuj zmienną, aby uruchomić makro.

Kod:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1) .End (xlUp) .Row Dim NumOfBars As Integer NumOfBars = 45 Dim PresentStatus As Integer Dim PercetageCompleted As Integer Application.StatusBar = "(" Spacja & Spacja ( NumOfBars) & ")" Dim k As Long For k = 1 To LR Next k End Sub

Krok 8: Wewnątrz pętli musimy obliczyć „obecny stan”. Tak więc dla zmiennej „PresentStatus” musimy zastosować poniższy wzór.

Kod:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1) .End (xlUp) .Row Dim NumOfBars As Integer NumOfBars = 45 Dim PresentStatus As Integer Dim PercetageCompleted As Integer Application.StatusBar = "(" Spacja & Spacja ( NumOfBars) & ")" Dim k As Long For k = 1 To LR PresentStatus = Int ((k / LR) * NumOfBars) Next k End Sub

Użyliśmy funkcji „ INT ”, aby otrzymać jako wynik wartość całkowitą.

Krok 9: Teraz musimy obliczyć „ procent ukończenia ”, abyśmy mogli zastosować wzór, jak pokazano poniżej.

Kod:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1) .End (xlUp) .Row Dim NumOfBars As Integer NumOfBars = 45 Dim PresentStatus As Integer Dim PercetageCompleted As Integer Application.StatusBar = "(" & Space ( NumOfBars) & ")" Dim k As Long For k = 1 To LR PresentStatus = Int ((k / LR) * NumOfBars) PercetageCompleted = Round (PresentStatus / NumOfBars * 100, 0) Next k End Sub

W tym przypadku użyliśmy funkcji ZAOKR w programie Excel, ponieważ niezależnie od miejsc dziesiętnych musimy zaokrąglić do najbliższej wartości zerowej, więc użyto tutaj ZAOKR z zerem jako argumentem.

Krok 10: Wstawiliśmy już nawias początkowy i końcowy do paska stanu, teraz musimy wstawić zaktualizowany wynik i można to zrobić za pomocą poniższego kodu.

Kod:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1) .End (xlUp) .Row Dim NumOfBars As Integer NumOfBars = 45 Dim PresentStatus As Integer Dim PercetageCompleted As Integer Application.StatusBar = "(" Spacja & Spacja ( NumOfBars) & ")" Dim k As Long For k = 1 To LR PresentStatus = Int ((k / LR) * NumOfBars) PercetageCompleted = Round (PresentStatus / NumOfBars * 100, 0) Application.StatusBar = "(" & String ( PresentStatus, "|") & Space (NumOfBars - PresentStatus) & _ ")" & PercetageCompleted & "% Complete" Next k End Sub

W powyższym kodzie wstawiliśmy nawias otwierający „(” i aby pokazać postęp makra, wstawiliśmy linię prostą (|) za pomocą funkcji STRING. Gdy pętla jest uruchomiona, przyjmie ona „ PresentStatus , ”I tych wiele prostych linii zostanie wstawionych na pasku stanu.

Kod:

Application.StatusBar = "(" & String (PresentStatus, "|")

Następnie musimy dodać spacje między jedną linią prostą a drugą, więc zostanie to obliczone przy użyciu „NumOfBars” minus „PresentStatus”.

Kod:

Application.StatusBar = "(" & String (PresentStatus, "|") & Space (NumOfBars - PresentStatus)

Następnie zamykamy nawias „)”. Następnie połączyliśmy wartość zmiennej „PercentageCompleted”, gdy pętla jest uruchomiona, ze słowem znajdującym się przed nią jako „% ukończenia”.

Kod:

Application.StatusBar = "(" & String(PresentStatus, "|") & Space(NumOfBars - PresentStatus)& _") " & PercetageCompleted & "% Complete"

When the code is running, we allow the user to access the worksheet, so we need to add “Do Events.”

Code:

Sub Status_Bar_Progress() Dim LR As Long LR = Cells(Rows.Count, 1).End(xlUp).Row Dim NumOfBars As Integer NumOfBars = 45 Dim PresentStatus As Integer Dim PercetageCompleted As Integer Application.StatusBar = "(" & Space(NumOfBars) & ")" Dim k As Long For k = 1 To LR PresentStatus = Int((k / LR) * NumOfBars) PercetageCompleted = Round(PresentStatus / NumOfBars * 100, 0) Application.StatusBar = "(" & String(PresentStatus, "|") & Space(NumOfBars - PresentStatus) & _ ") " & PercetageCompleted & "% Complete" DoEvents Next k End Sub

Step 11: After adding “Do Events,” we can write the codes that need to be executed here.

For example, I want to insert serial numbers to the cells, so I will write code as below.’

Code:

Sub Status_Bar_Progress() Dim LR As Long LR = Cells(Rows.Count, 1).End(xlUp).Row Dim NumOfBars As Integer NumOfBars = 45 Dim PresentStatus As Integer Dim PercetageCompleted As Integer Application.StatusBar = "(" & Space(NumOfBars) & ")" Dim k As Long For k = 1 To LR PresentStatus = Int((k / LR) * NumOfBars) PercetageCompleted = Round(PresentStatus / NumOfBars * 100, 0) Application.StatusBar = "(" & String(PresentStatus, "|") & Space(NumOfBars - PresentStatus) & _") " & PercetageCompleted & "% Complete" DoEvents Cells(k, 1).Value = k 'You can add your code here Next k End Sub

Step 12: Before we come out of the loop, we need to add one more thing, i.e., If the loop near the last used row in the worksheet then we need to make the status bar as normal.

Code:

Sub Status_Bar_Progress() Dim LR As Long LR = Cells(Rows.Count, 1).End(xlUp).Row Dim NumOfBars As Integer NumOfBars = 45 Dim PresentStatus As Integer Dim PercetageCompleted As Integer Application.StatusBar = "(" & Space(NumOfBars) & ")" Dim k As Long For k = 1 To LR PresentStatus = Int((k / LR) * NumOfBars) PercetageCompleted = Round(PresentStatus / NumOfBars * 100, 0) Application.StatusBar = "(" & String(PresentStatus, "|") & Space(NumOfBars - PresentStatus) & _") " & PercetageCompleted & "% Complete" DoEvents Cells(k, 1).Value = k 'You can add your code here 'You can Add your code here 'You can Add your code here 'You can add your code here 'You can add your code here 'You can add your code here If k = LR Then Application.StatusBar = False Next k End Sub

Ok, we are done with coding. As you execute the code here, you can see the status bar updating its percentage completion status.

Output:

Below is the code for you.

Code:

Sub Status_Bar_Progress() Dim LR As Long LR = Cells(Rows.Count, 1).End(xlUp).Row Dim NumOfBars As Integer NumOfBars = 45 Dim PresentStatus As Integer Dim PercetageCompleted As Integer Application.StatusBar = "(" & Space(NumOfBars) & ")" Dim k As Long For k = 1 To LR PresentStatus = Int((k / LR) * NumOfBars) PercetageCompleted = Round(PresentStatus / NumOfBars * 100, 0) Application.StatusBar = "(" & String(PresentStatus, "|") & Space(NumOfBars - PresentStatus) & _") " & PercetageCompleted & "% Complete" DoEvents Cells(k, 1).Value = k 'You can add your code here 'You can Add your code here 'You can Add your code here 'You can add your code here 'You can add your code here 'You can add your code here If k = LR Then Application.StatusBar = False Next k End Sub

Rzeczy do zapamiętania

  • Możemy dodać tylko te zadania, które należy wykonać w pętli.
  • Możesz dodać zadania, które musisz wykonać po dodaniu procedury „Do Events”.

Interesujące artykuły...