VBA Durum Çubuğu - VBA Kodunu Kullanarak StatusBar Nasıl Etkinleştirilir?

Excel VBA Durum Çubuğu

StatusBar , yürütme sırasında bitmiş veya tamamlanmış kodun durumunu görüntülemek için kullanılan bir vba özelliğidir, bir makro yürütüldüğünde çalışma sayfasının sol taraf köşesinde görüntülenir ve durum yüzde olarak gösterilir. kullanıcıya.

Makro geride kaldığında, ne kadar süreceğini bilmeden beklemek sinir bozucu bir şeydir. Kodun çalıştığı aşamadaysanız, en azından ne kadar zaman alacağını hesaplayabilirsiniz. Dolayısıyla, aşağıdaki gibi, şu ana kadar tamamlanmış olan iş yüzdesini gösteren bir durum çubuğuna sahip olmaktır.

Application.StatusBar nedir?

Application.StatusBar, makro sahnenin arkasında çalışırken durumu göstermek için makro kodlamada kullanabileceğimiz özelliktir.

Bu bizim "VBA İlerleme Çubuğumuz" kadar güzel değil ama makro projenin durumunu bilmek için yeterince iyi.

VBA kullanarak StatusBar Oluşturma Örneği

Bir durum çubuğu oluşturmak için aşağıdaki adımları izleyin.

Adım 1: İlk olarak, çalışma sayfasında son kullanılan satırı bulmak için VBA değişkenini tanımlayın.

Kod:

Sub Status_Bar_Progress () Dim LR As Long End Sub

Adım 2: Aşağıdaki kodu kullanarak son kullanılan satırı bulun.

Kod:

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

Adım 3: Ardından, gösterilecek çubuk sayısını tutacak değişkeni tanımlamamız gerekiyor.

Kod:

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

Bu, durum çubuğunda kaç tane çubuğun gösterilmesine izin verildiğini tutacaktır.

Adım 4: Bu değişken için çubuğun sınırını 45 olarak kaydedin.

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

Adım 5: Mevcut durumu ve makro çalışırken tamamlanan yüzdeyi tutmak için iki değişken daha tanımlayın.

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 End Sub

Adım 6: Şimdi, durum çubuğunu etkinleştirmek için aşağıdaki kodu kullanın.

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) & ")" Son Alt

Bunun yapacağı şey, köşeli ayraç (() ekleyecek ve metni kapanış ayracı ()) ile bitirmeden önce 45 boşluk karakteri ekleyecektir.

Kodu yürütün ve aşağıdaki excel VBA durum çubuğunda görebiliriz.

Çıktı:

Adım 7: Şimdi, tamamlanan makronun yüzdesini hesaplamak için For Next döngüsünü VBA'ya dahil etmemiz gerekiyor. Makroyu başlatmak için bir değişken tanımlayın.

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 Next k End Sub

Adım 8: Döngünün içinde, "Mevcut Durum" un ne olduğunu hesaplamamız gerekir. Dolayısıyla "PresentStatus" değişkeni için aşağıdaki formülü uygulamamız gerekiyor.

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) Next k End Sub

Sonuç olarak tamsayı değerini elde etmek için " INT " işlevini kullandık.

Adım 9: Şimdi, " Tamamlanma Yüzdesi " nin ne olduğunu hesaplamamız gerekiyor , böylece formülü aşağıda gösterildiği gibi uygulayabiliriz.

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

Bu durumda, Excel'de ROUND işlevini kullandık çünkü ondalık basamaklar ne olursa olsun, en yakın sıfır değerine yuvarlamamız gerekir, yani burada argüman olarak sıfır ile YUVARLA kullanılır.

Adım 10: Başlangıç ​​parantezini ve bitiş parantezini durum çubuğuna zaten ekledik, şimdi güncellenmiş sonucu eklememiz gerekiyor ve aşağıdaki kod kullanılarak yapılabilir.

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) Application.StatusBar = "(" & String ( PresentStatus, "|") & Space (NumOfBars - PresentStatus) & _ ")" & PercetageCompleted & "% Complete" Next k End Sub

Yukarıdaki kodda açılış parantezini ekledik ("ve makronun ilerlemesini göstermek için STRING fonksiyonunu kullanarak düz bir çizgi (|) ekledik . Döngü çalışırken," PresentStatus , ”Ve bu birçok düz çizgi durum çubuğuna eklenecektir.

Kod:

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

Daha sonra, bir düz çizgi arasına boşluk karakterleri eklememiz gerekir, bu nedenle bu, "NumOfBars" eksi "Mevcut Durum" kullanılarak hesaplanacaktır.

Kod:

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

Ardından ")" dirseğini kapatıyoruz. Daha sonra, döngü çalışırken "Tamamlanan Yüzde" değişken değerini önündeki kelime ile "Tamamlanan Yüzde" olarak birleştirdik.

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

Hatırlanacak şeyler

  • Döngü içerisinde sadece yapılması gereken görevleri ekleyebiliriz.
  • "Do Events" prosedürünü ekledikten sonra yapmanız gereken görevleri ekleyebilirsiniz.

Ilginç makaleler...