VBA 進度條製作說明

vba_progress_bar

根據哈佛商學院企業管理副教授 Ryan Buell 發現,進度條能夠產生”勞動幻覺”,使用者可以感受到”工作正在確實的進行”,減少等待焦慮,優化使用者體驗。Excel VBA 最重要就是處理重複工作,因此程式碼會有很多迴圈,可能又會搭配大量的判斷式,很容易造成程式運作時間拉長,進而出現類似當機的畫面。

因此,如果程式需要大量運行時間,建議製作進度條,讓使用者知道程式正在運行,降低等待的焦慮。本文說明如何自製簡易的進度條,大體上為 2 步驟,第 1 為製作進度條的圖示,第 2 為撰寫進度條程式碼。

製作進度條圖示

進度條基底 | 建立表單 UserForm1

建立表單 UserForm1,製作進度條的基底

vba_progress_bar_build_userform1
vba_progress_bar_build_userform1

顯示進度 | 插入標籤 Label1

插入標籤 Label1,顯示進度百分比

vba_progress_bar_label1
vba_progress_bar_label1

進度條圖示框架 | 插入框架 Frame1

插入框架 Frame1,製作進度圖示的框架

vba_progress_bar_frame1
vba_progress_bar_frame1

進度條顯示圖示 | 插入標籤 Label2

插入標籤 Label2,利用 Label2的寬度變化,做為進度的顯示圖示

vba_progress_bar_label2
vba_progress_bar_label2

外觀調整

前述幾個步驟,已經完成 VBA 進度條的基本設定。接下來我們進行微調設定,讓外觀更接近進度條

調整 UserForm1 至適當大小

調整 UserFrom1 至適當大小

vba_progress_bar_userform1_size
vba_progress_bar_userform1_size

修改 UserFrom1 名稱

vba_progress_bar_userform1_caption
vba_progress_bar_userform1_caption

刪除 Frame1 及 Label2 名稱

vba_progress_bar_frame1_caption
vba_progress_bar_label2_caption
vba_progress_bar_frame1_label2_caption

調整 Fram1 外觀

調整 Frame1 的 SpecialEffect,選擇第 2 項 “fmSpecialSunken”,呈現出進度條的外觀

vba_progress_bar_frame1_sunken
vba_progress_bar_frame1_sunken

調整 Label2 顏色

調整 Label2 顏色,作為進度條背景顏色,本範例選擇藍色

vba_progress_bar_label2_color
vba_progress_label2_color

撰寫進度條程式碼

進度條主要目的是顯示迴圈的執行進度,因此需要將進度條程式碼撰寫在迴圈裡。以下為迴圈 10,000 次範例,進度條顯示執行進度。迴圈結束後,呼叫 MsgBox 函數顯示程式執行完成,最後關閉進度條

Sub progress_bar()
    Dim i, j As Long
    
    j = 10000
    UserForm1.Show 0
    For i = 1 To j
        With UserForm1
            .Label1.Caption = CByte((i / j) * 100) & "%"
            .Label2.Width = (i / j) * .Frame1.Width
        End With
        DoEvents
    Next i
    MsgBox "Done"
    Unload UserForm1
    
End Sub
行數說明
5啟動 UserForm1,顯示進度條。注意一定要輸入引數 0,進度條才能正常運作
7使用 With End With 語法,簡化程式碼
81. 計算完成百分比,分子為目前處理數,分母為總處理數
2. 呼叫 CByte 函數,轉換為 Byte 資料型態
3. 利用 Label1.Caption 顯示完成進度
9利用完成百分比乘上 Frame1 的總長度,計算出 Label2 寬度。Label2 寬度會隨著進度不斷增加,呈現出進度條增加的圖示
11一定要加上 DoEvents,要暫時釋出 Excel 對系統的控制權,進度條才能正常顯示
13呼叫 MsgBox 函數,顯示程式完成
14結束進度條,關閉 UserForm1
vba_progress_bar_operation

如果本篇文章有幫助到你,請在下方拍手圖示按 5 下。只要花幾秒鐘登入 Google 或 FB 帳號,不需任何花費就能提供我實質的回饋,支持我繼續創作,謝謝

發表迴響