Екцел ВБА Статусна трака
СтатусБар је својство вба која се користи за приказ статуса кода завршеног или довршеног у време извршења, приказује се у левом углу радног листа када се изврши макро и статус се приказује у процентима кориснику.
Када макро ради уназад, фрустрирајуће је чекати не знајући колико ће времена требати. Ако сте у фази у којој код ради, можете барем да израчунате време које ће му требати. Дакле, идеја је да имамо статусну траку која показује проценат до сада обављеног посла, попут доњег.

Шта је Апплицатион.СтатусБар?
Апплицатион.СтатусБар је својство које можемо користити у кодирању макронаредби да бисмо приказали статус када макро ради иза сцене.
Ово није тако лепо као наша „ВБА Прогресс Бар“, али довољно добро да се зна статус макро пројекта.

Пример за креирање статусне траке помоћу ВБА
Следите кораке у наставку да бисте креирали статусну траку.
Корак 1: Прво дефинишите ВБА променљиву да бисте пронашли последњи коришћени ред на радном листу.
Шифра:
Суб Статус_Бар_Прогресс () Дим ЛР Ас Лонг Енд Суб

Корак 2: Пронађите последњи коришћени ред помоћу доњег кода.
Шифра:
Суб Статус_Бар_Прогресс () Дим ЛР ас Лонг ЛР = Целлс (Ровс.Цоунт, 1) .Енд (клУп) .Ред Енд Суб

Корак 3: Следеће, треба да дефинишемо променљиву која ће садржати број трака за приказ.
Шифра:
Суб Статус_Бар_Прогресс () Дим ЛР ас Лонг ЛР = Целлс (Ровс.Цоунт, 1) .Енд (клУп) .Ред Дим НумОфБарс Ас Интегер Енд Суб

Ово ће садржати колико је трака дозвољено да се прикаже на статусној траци.
Корак 4: За ову променљиву сачувајте ограничење траке као 45.
Шифра:
Суб Статус_Бар_Прогресс () Дим ЛР ас Лонг ЛР = Целлс (Ровс.Цоунт, 1) .Енд (клУп) .Ред Дим НумОфБарс Ас Интегер НумОфБарс = 45 Енд Суб

Корак 5: Дефинишите још две променљиве које ће задржати тренутни статус и проценат завршених када је макро покренут.
Шифра:
Суб Статус_Бар_Прогресс () Дим ЛР ас Лонг ЛР = Целлс (Ровс.Цоунт, 1) .Енд (клУп) .Ред Дим НумОфБарс Ас Интегер НумОфБарс = 45 Дим ПресентСтатус Ас Интегер Дим ПерцетагеЦомплетед Ас Интегер Енд Суб

Корак 6: Сада, да бисте омогућили статусну траку, користите доњи код.
Шифра:
Суб Статус_Бар_Прогресс () Дим ЛР ас Лонг ЛР = Целлс (Ровс.Цоунт, 1) .Енд (клУп) .Ред Дим НумОфБарс Ас Интегер НумОфБарс = 45 Дим ПресентСтатус Ас Интегер Дим ПерцетагеЦомплетед Ас Интегер Апплицатион.СтатусБар = "(" & Спаце ( НумОфБарс) & ")" Крај Суб

Шта ће ово учинити, додаће заграду (() и додати 45 размака пре него што заврши текст затварајућом заградом ()).
Извршите код и могли бисмо видети доле на траци статуса екцела ВБА.
Излаз:

Корак 7: Сада морамо да укључимо петљу Фор Нект у ВБА да бисмо израчунали проценат макроа који је завршен. Дефинишите променљиву за покретање макронаредбе.
Шифра:
Суб Статус_Бар_Прогресс () Дим ЛР ас Лонг ЛР = Целлс (Ровс.Цоунт, 1) .Енд (клУп) .Ред Дим НумОфБарс Ас Интегер НумОфБарс = 45 Дим ПресентСтатус Ас Интегер Дим ПерцетагеЦомплетед Ас Интегер Апплицатион.СтатусБар = "(" & Спаце ( НумОфБарс) & ")" Дим к Колико дуго к = 1 До ЛР Следећи к Крај Суб

Корак 8: Унутар петље морамо израчунати шта је „Садашњи статус“. Дакле, за променљиву „ПресентСтатус“, морамо применити формулу као у наставку.
Шифра:
Суб Статус_Бар_Прогресс () Дим ЛР ас Лонг ЛР = Целлс (Ровс.Цоунт, 1) .Енд (клУп) .Ред Дим НумОфБарс Ас Интегер НумОфБарс = 45 Дим ПресентСтатус Ас Интегер Дим ПерцетагеЦомплетед Ас Интегер Апплицатион.СтатусБар = "(" & Спаце ( НумОфБарс) & ")" Дим к Колико дуго траје к = 1 до ЛР ПресентСтатус = Инт ((к / ЛР) * НумОфБарс) Следећи к Крај Суб

Користили смо функцију „ ИНТ “ да бисмо као резултат добили целобројну вредност.
Корак 9: Сада морамо израчунати шта је „ Проценат завршетка “, тако да можемо применити формулу као што је приказано доле.
Шифра:
Суб Статус_Бар_Прогресс () Дим ЛР ас Лонг ЛР = Целлс (Ровс.Цоунт, 1) .Енд (клУп) .Ред Дим НумОфБарс Ас Интегер НумОфБарс = 45 Дим ПресентСтатус Ас Интегер Дим ПерцетагеЦомплетед Ас Интегер Апплицатион.СтатусБар = "(" & Спаце ( НумОфБарс) & ")" Дим к Колико дуго траје к = 1 до ЛР ПресентСтатус = Инт ((к / ЛР) * НумОфБарс) ПерцетагеЦомплетед = Роунд (ПресентСтатус / НумОфБарс * 100, 0) Нект к Енд Суб

У овом случају, користили смо функцију РОУНД у екцелу, јер које год децималне места морали да заокружимо на најближу нулу, па је овде коришћен РОУНД са нулом као аргументом.
Корак 10: Већ смо уметнули почетну и крајњу заграду на статусну траку, сада треба да убацимо ажурирани резултат, а то се може урадити помоћу доњег кода.
Шифра:
Суб Статус_Бар_Прогресс () Дим ЛР ас Лонг ЛР = Целлс (Ровс.Цоунт, 1) .Енд (клУп) .Ред Дим НумОфБарс Ас Интегер НумОфБарс = 45 Дим ПресентСтатус Ас Интегер Дим ПерцетагеЦомплетед Ас Интегер Апплицатион.СтатусБар = "(" & Спаце ( НумОфБарс) & ")" Дим к Колико дуго траје к = 1 до ЛР ПресентСтатус = Инт ((к / ЛР) * НумОфБарс) ПерцетагеЦомплетед = Роунд (ПресентСтатус / НумОфБарс * 100, 0) Апплицатион.СтатусБар = "(" & Стринг ( ПресентСтатус, "|") & Спаце (НумОфБарс - ПресентСтатус) & _ ")" & ПерцетагеЦомплетед & "% Цомплете" Следећи к Крај Суб
У горњи код убацили смо уводну заграду “(“ и да бисмо приказали напредак макронаредбе, уметнули смо праву линију (|) помоћу функције СТРИНГ. Када се петља покрене, узеће „ ПресентСтатус“ , “И тих много равних линија биће уметнуто у статусну траку.
Шифра:
Апплицатион.СтатусБар = "(" & Стринг (ПресентСтатус, "|"))
Даље, треба да додамо размаке између једне праве линије другој, па ће се то израчунати помоћу „НумОфБарс“ минус „ПресентСтатус“.
Шифра:
Апплицатион.СтатусБар = "(" & Стринг (ПресентСтатус, "|") & Спаце (НумОфБарс - ПресентСтатус)
Затим затворимо заграду „).“ Даље, комбиновали смо вредност променљиве „ПерцентагеЦомплетед“ док се петља изводи, а реч испред ње била је „% Цомплетед“.
Шифра:
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
Ствари које треба запамтити
- Можемо додати само задатке које треба обавити у оквиру петље.
- Можете додати задатке које требате обавити након додавања поступка „Догађаји“.