Excel VBA-statusfält
StatusBar är egenskapen för en vba som används för att visa status för koden färdig eller slutförd vid tidpunkten för körning, den visas i det vänstra hörnet av kalkylbladet när ett makro körs och statusen visas i procent till användaren.
När makrot körs är det frustrerande att vänta utan att veta hur lång tid det tar. Om du befinner dig i det skede där koden körs kan du åtminstone beräkna den tid det kommer att ta. Så tanken är att ha ett statusfält som visar hur mycket arbete som hittills har slutförts, som nedan.

Vad är Application.StatusBar?
Application.StatusBar är den egenskap som vi kan använda i makrokodning för att visa status när makrot körs bakom scenen.
Det här är inte lika vackert som vår "VBA Progress Bar" men tillräckligt bra för att veta makroprojektets status.

Exempel på att skapa statusfält med VBA
Följ stegen nedan för att skapa ett statusfält.
Steg 1: Definiera först VBA-variabeln för att hitta den senast använda raden i kalkylbladet.
Koda:
Sub Status_Bar_Progress () Dim LR Som Long End Sub

Steg 2: Hitta den senast använda raden med hjälp av nedanstående kod.
Koda:
Sub Status_Bar_Progress () Dim LR så länge LR = Cells (Rows.Count, 1) .End (xlUp) .Row End Sub

Steg 3: Därefter måste vi definiera variabeln för att hålla antalet staplar som ska visas.
Koda:
Sub Status_Bar_Progress () Dim LR så länge LR = Cells (Rows.Count, 1) .End (xlUp) .Row Dim NumOfBars As Integer End Sub

Detta håller hur många staplar som får visas i statusfältet.
Steg 4: För den här variabeln, lagra gränsen för stapeln som 45.
Koda:
Sub Status_Bar_Progress () Dim LR Så länge LR = Cells (Rows.Count, 1) .End (xlUp) .Row Dim NumOfBars As Integer NumOfBars = 45 End Sub

Steg 5: Definiera ytterligare två variabler för att hålla aktuell status och procentandel klar när makrot körs.
Koda:
Sub Status_Bar_Progress () Dim LR Så länge LR = Cells (Rader.Count, 1) .End (xlUp) .Row Dim NumOfBars Som Integer NumOfBars = 45 Dim PresentStatus Som Integer Dim PercetageSlutfört som Integer End Sub Sub

Steg 6: Använd nu nedanstående kod för att aktivera statusfältet.
Koda:
Sub Status_Bar_Progress () Dim LR så länge 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) & ")" End Sub

Vad detta gör kommer att lägga till parentes (() och lägga till 45 blankstegstecken innan texten avslutas med parentes ()).
Kör koden och vi kan se nedan i excel VBA-statusfältet.
Produktion:

Steg 7: Nu måste vi inkludera For Next-slingan i VBA för att beräkna procentandelen av makrot som har slutförts. Definiera en variabel för att starta makrot.
Koda:
Sub Status_Bar_Progress () Dim LR så länge 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 så länge för k = 1 till LR nästa k Avsluta sub

Steg 8: Inuti slingan måste vi beräkna vad "Nuvarande status" är. Så för variabeln "PresentStatus" måste vi tillämpa formeln enligt nedan.
Koda:
Sub Status_Bar_Progress () Dim LR så länge 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) Next k End Sub

Vi har använt “ INT ” -funktionen för att få heltalsvärdet som ett resultat.
Steg 9: Nu måste vi beräkna vad " procentuell slutförande " är, så att vi kan tillämpa formeln som visas nedan.
Koda:
Sub Status_Bar_Progress () Dim LR så länge 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 så länge för k = 1 till LR PresentStatus = Int ((k / LR) * NumOfBars) PercetageCompleted = Round (PresentStatus / NumOfBars * 100, 0) Nästa k End Sub

I det här fallet har vi använt ROUND- funktionen i excel eftersom oavsett decimaler måste vi avrunda till närmaste nollvärde, så ROUND med noll som argument har använts här.
Steg 10: Vi har redan infogat startfästet och slutfästet i statusfältet, nu måste vi infoga det uppdaterade resultatet, och det kan göras med hjälp av nedanstående kod.
Koda:
Sub Status_Bar_Progress () Dim LR så länge 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 så länge för k = 1 till LR PresentStatus = Int ((k / LR) * NumOfBars) PercetageCompleted = Round (PresentStatus / NumOfBars * 100, 0) Application.StatusBar = "(" & String ( PresentStatus, "|") & Space (NumOfBars - PresentStatus) & _ ")" & PercetageCompleted & "% Complete" Nästa k End Sub
I koden ovan har vi infogat öppningsfästet "(" och för att visa makroförloppet har vi infogat en rak linje (|) med STRING-funktionen. När slingan körs tar den " PresentStatus" , ”Och de många raka linjerna kommer att infogas i statusfältet.
Koda:
Application.StatusBar = "(" & String (PresentStatus, "|")
Därefter måste vi lägga till mellanslagstecken mellan en rak linje till den andra, så detta kommer att beräknas med hjälp av "NumOfBars" minus "PresentStatus."
Koda:
Application.StatusBar = "(" & String (PresentStatus, "|") & Space (NumOfBars - PresentStatus)
Sedan stänger vi ut fästet “).” Därefter har vi kombinerat variabelvärdet "PercentageCompleted" medan slingan körs med ordet framför som "% Completed."
Koda:
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
Saker att komma ihåg
- Vi kan bara lägga till de uppgifter som behöver göras inom slingan.
- Du kan lägga till de uppgifter du behöver göra efter att du har lagt till "Gör händelser" -proceduren.