Excel VBA StatusBar
StatusBar este proprietatea unui vba care este utilizat pentru a afișa starea codului terminat sau completat în momentul execuției, este afișat în colțul din stânga al foii de lucru când se execută o macro și starea este afișată în procente către utilizator.
Când macro-ul rulează în spate, este un lucru frustrant să aștepți fără să știi cât va dura. Dacă vă aflați în etapa în care rulează codul, puteți calcula cel puțin timpul pe care îl va lua. Deci, ideea este să aveți o bară de stare care să arate procentul de muncă finalizat până acum, ca cel de mai jos.

Ce este Application.StatusBar?
Application.StatusBar este proprietatea pe care o putem folosi în codarea macro pentru a afișa starea când macro-ul rulează în spatele scenei.
Acest lucru nu este la fel de frumos ca „Bara de progres VBA”, dar suficient de bun pentru a cunoaște starea macro-proiectului.

Exemplu pentru a crea StatusBar folosind VBA
Urmați pașii de mai jos pentru a crea o bară de stare.
Pasul 1: Mai întâi, definiți variabila VBA pentru a găsi ultimul rând utilizat în foaia de lucru.
Cod:
Sub Status_Bar_Progress () Dim LR As Long End Sub

Pasul 2: Găsiți ultimul rând folosit folosind codul de mai jos.
Cod:
Sub Status_Bar_Progress () Dim LR As Long LR = Celule (Rows.Count, 1). End (xlUp). End End Sub

Pasul 3: În continuare, trebuie să definim variabila pentru a menține numărul de bare care trebuie afișate.
Cod:
Sub Status_Bar_Progress () Dim LR As Long LR = Celule (Rows.Count, 1). End (xlUp) .Row Dim NumOfBars as Integer End Sub

Aceasta va conține câte bare sunt permise să se afișeze în bara de stare.
Pasul 4: pentru această variabilă, stocați limita barei ca 45.
Cod:
Sub Status_Bar_Progress () Dim LR As Long LR = Celule (Rows.Count, 1). End (xlUp) .Row Dim NumOfBars As Integer NumOfBars = 45 End Sub

Pasul 5: Definiți încă două variabile pentru a menține starea curentă și procentul finalizat când macro-ul rulează.
Cod:
Sub Status_Bar_Progress () Dim LR As Long LR = Celule (Rows.Count, 1). End (xlUp) .Row Dim NumOfBars as Integer NumOfBars = 45 Dim PresentStatus As Integer Dim Percetage Completed As Integer End Sub

Pasul 6: Acum, pentru a activa bara de stare, utilizați codul de mai jos.
Cod:
Sub Status_Bar_Progress () Dim LR As Long LR = Celule (Rows.Count, 1). End (xlUp) .Row Dim NumOfBars As Integer NumOfBars = 45 Dim PresentStatus As Integer Dim PercetageCompleted As Integer Application.StatusBar = "(" & Space ( NumOfBars) & ")" End Sub

Ceea ce va face va adăuga paranteză (() și va adăuga 45 de caractere spații înainte de a termina textul cu paranteză de închidere ()).
Executați codul și am putut vedea mai jos în bara de stare excel VBA.
Ieșire:

Pasul 7: Acum, trebuie să includem bucla Pentru următorul în VBA pentru a calcula procentul de macro care a fost finalizat. Definiți o variabilă pentru a porni macro-ul.
Cod:
Sub Status_Bar_Progress () Dim LR As Long LR = Celule (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 Next k End Sub

Pasul 8: În interiorul buclei, trebuie să calculăm care este „Starea actuală”. Deci, pentru variabila „PrezentStatus”, trebuie să aplicăm formula după cum urmează.
Cod:
Sub Status_Bar_Progress () Dim LR As Long LR = Celule (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) Next k End Sub

Am folosit funcția „ INT ” pentru a obține valoarea întreagă ca rezultat.
Pasul 9: Acum, trebuie să calculăm care este „ Finalizarea procentuală ”, astfel încât să putem aplica formula așa cum se arată mai jos.
Cod:
Sub Status_Bar_Progress () Dim LR As Long LR = Celule (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

În acest caz, am folosit funcția ROUND în excel, deoarece indiferent de zecimale, trebuie să rotunjim la cea mai apropiată valoare zero, deci ROUND cu zero, deoarece argumentul a fost folosit aici.
Pasul 10: Am introdus deja paranteze de pornire și paranteze de sfârșit în bara de stare, acum trebuie să inserăm rezultatul actualizat și se poate face folosind codul de mai jos.
Cod:
Sub Status_Bar_Progress () Dim LR As Long LR = Celule (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 ( PrezentStatus, "|") & Spațiu (NumOfBars - PrezentStat) & _ ")" & PercetageCompleted & "% Complete" Următorul k End Sub
În codul de mai sus, am inserat paranteze de deschidere „(„ și pentru a arăta progresul macro-ului, am inserat o linie dreaptă (|) utilizând funcția STRING. Când bucla se execută, va lua „ PrezentStatus ” , Iar acele multe linii drepte vor fi inserate în bara de stare.
Cod:
Application.StatusBar = "(" & Șir (PrezentStatus, "|")
Apoi, trebuie să adăugăm caractere spațiale între o linie dreaptă la cealaltă, deci acest lucru va fi calculat folosind „NumOfBars” minus „PrezentStatus”.
Cod:
Application.StatusBar = "(" & String (PresentStatus, "|") & Space (NumOfBars - PresentStatus)
Apoi închidem parantezele „)”. Apoi, am combinat valoarea variabilă „PercentageCompleted” în timp ce bucla rulează cu cuvântul din față ca „% Completed”.
Cod:
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
Lucruri de amintit
- Putem adăuga doar sarcinile care trebuie făcute în buclă.
- Puteți adăuga sarcinile pe care trebuie să le faceți după adăugarea procedurii „Faceți evenimente”.