VBA būsenos juosta - Kaip įjungti „StatusBar“ naudojant VBA kodą?

„Excel VBA“ būsenos juosta

„StatusBar“ yra „ vba “ ypatybė, naudojama rodant užbaigto arba užbaigto kodo būseną vykdymo metu, ji rodoma kairiajame darbalapio kampe, kai vykdoma makrokomanda, o būsena rodoma procentais vartotojui.

Kai makrokomanda bėga, yra nemalonu laukti nežinant, kiek laiko tai užtruks. Jei esate toje stadijoje, kai veikia kodas, galite bent jau apskaičiuoti laiką, kurį jis užtruks. Taigi, idėja yra turėti būsenos juostą, rodančią iki šiol atliktų darbų procentą, kaip ir žemiau.

Kas yra „Application.StatusBar“?

„Application.StatusBar“ yra ypatybė, kurią galime naudoti makrokomandų kodavimui rodyti būseną, kai makrokomanda veikia už scenos.

Tai nėra tokia graži kaip mūsų „VBA pažangos juosta“, bet pakankamai gera, kad žinotumėte makroprojekto būklę.

„StatusBar“ kūrimo naudojant VBA pavyzdys

Norėdami sukurti būsenos juostą, atlikite toliau nurodytus veiksmus.

1 žingsnis: Pirmiausia apibrėžkite VBA kintamąjį, kad surastumėte paskutinę naudojamą eilutę darbalapyje.

Kodas:

Sub Status_Bar_Progress () Dim LR As Long End Sub

2 žingsnis: naudodami žemiau esantį kodą raskite paskutinę naudotą eilutę.

Kodas:

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

3 žingsnis: Tada turime apibrėžti kintamąjį, kad būtų rodomas rodomų juostų skaičius.

Kodas:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1). End (xlUp). Eilutės Dim NumOfBars kaip sveikojo galo sub

Bus laikoma, kiek juostų leidžiama rodyti būsenos juostoje.

4 žingsnis: Šio kintamojo juostos ribą laikykite 45.

Kodas:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1). End (xlUp). Eilutės Dim NumOfBars kaip sveikas skaičius NumOfBars = 45 pabaigos sub

5 žingsnis: Apibrėžkite dar du kintamuosius, kad išlaikytumėte dabartinę būseną ir procentinę dalį, kai makrokomanda veikia.

Kodas:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1). End (xlUp). Eilutė Dim NumOfBars kaip sveikoji NumOfBars = 45 Dim PresentStatus kaip sveikoji Dim Percetage

6 žingsnis: Dabar, norėdami įjungti būsenos juostą, naudokite žemiau esantį kodą.

Kodas:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1) .End (xlUp). Eilutė Dim NumOfBars kaip sveikoji NumOfBars = 45 Dim PresentStatus kaip sveikoji Dim PercetageCompleted kaip sveikoji programa.StatusBar = "(" & Tarpas ( NumOfBars) & ")" Pabaigos sub

Ką tai padarys, pridėsite skliaustą (() ir pridėsite 45 tarpų simbolius prieš teksto pabaigą uždaromuoju skliaustu ()).

Vykdykite kodą ir toliau matėme „Excel“ VBA būsenos juostoje.

Išvestis:

7 žingsnis: Dabar, norėdami apskaičiuoti baigtos makrokomandos procentą, turime įtraukti „V Next“ kilpą į VBA. Apibrėžkite kintamąjį, kad pradėtumėte makrokomandą.

Kodas:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1) .End (xlUp). Eilutė Dim NumOfBars kaip sveikoji NumOfBars = 45 Dim PresentStatus kaip sveikoji Dim PercetageCompleted kaip sveikoji programa.StatusBar = "(" & Tarpas ( NumOfBars) & ")" Dim k As Long For k = 1 To LR Next k End Sub

8 žingsnis: ciklo viduje turime apskaičiuoti, kokia yra „dabartinė būsena“. Taigi kintamajam „PresentStatus“ turime pritaikyti žemiau pateiktą formulę.

Kodas:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1) .End (xlUp). Eilutė Dim NumOfBars kaip sveikoji NumOfBars = 45 Dim PresentStatus kaip sveikoji Dim PercetageCompleted kaip sveikoji programa.StatusBar = "(" & Tarpas ( NumOfBars) & ")" Dim k As Long For k = 1 To LR PresentStatus = Int ((k / LR) * NumOfBars) Kitas k End Sub

Mes naudojome funkciją „ INT “, kad gautume sveikojo skaičiaus vertę.

9 žingsnis: Dabar turime apskaičiuoti, kas yra „ Baigimo procentas “, kad galėtume pritaikyti formulę, kaip parodyta žemiau.

Kodas:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1) .End (xlUp). Eilutė Dim NumOfBars kaip sveikoji NumOfBars = 45 Dim PresentStatus kaip sveikoji Dim PercetageCompleted kaip sveikoji programa.StatusBar = "(" & Tarpas ( NumOfBars) & ")" Dim k As Long For k = 1 To LR PresentStatus = Int ((k / LR) * NumOfBars) PercetageCompleted = Round (PresentStatus / NumOfBars * 100, 0) Kitas k Pabaiga Sub

Šiuo atveju „Excel“ programoje naudojome ROUND funkciją, nes nepaisant dešimtųjų, turime suapvalinti iki artimiausios nulinės vertės, taigi čia naudojamas argumentas ROUND su nuliu.

10 žingsnis: Mes jau įkišome pradinį skliaustą ir pabaigos skliaustą į būsenos juostą, dabar turime įterpti atnaujintą rezultatą, ir tai galima padaryti naudojant žemiau esantį kodą.

Kodas:

Sub Status_Bar_Progress () Dim LR As Long LR = Cells (Rows.Count, 1) .End (xlUp). Eilutė Dim NumOfBars kaip sveikoji NumOfBars = 45 Dim PresentStatus kaip sveikoji Dim PercetageCompleted kaip sveikoji programa.StatusBar = "(" & Tarpas ( 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" Kitas k End Sub

Į pirmiau pateiktą kodą įterpėme pradinį skliaustą „(„ ir norėdami parodyti makrokomandos eigą, naudodami funkciją STRING, įterpėme tiesią liniją (|). Kai ciklas veikia, jis užims „ PresentStatus“ , Ir tos daug tiesių bus įterptos į būsenos juostą.

Kodas:

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

Tada turime pridėti tarpo simbolių tarp vienos tiesės ir kitos, todėl tai bus apskaičiuojama naudojant „NumOfBars“ atėmus „PresentStatus“.

Kodas:

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

Tada mes uždarome kronšteiną „).“ Toliau mes sujungėme kintamojo reikšmę „PercentageCompleted“, kol ciklas veikia, su priešais esančiu žodžiu „% Completed“.

Kodas:

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

Ką reikia atsiminti

  • Galime pridėti tik tas užduotis, kurias reikia atlikti ciklo metu.
  • Pridėję procedūrą „Atlikti įvykius“, galite pridėti užduotis, kurias turite atlikti.

Įdomios straipsniai...