excel - 基本語法下篇 - vba入門




如何在Excel中創建狀態對話框 (4)

我在Excel中創建了一個數據庫報告生成器。 我正在嘗試創建一個對話框,在程序運行時顯示狀態信息。

當我生成報告時,雖然出現對話框,但我無法刷新/更新顯示的信息。 大多數時候,對話框只是部分出現。 我曾嘗試使用.repaint方法,但我仍然得到相同的結果。 報告生成後,我只能看到完整的對話框。


嘗試在你的循環中添加一個DoEvents調用。 這應該允許窗體重新繪製並接受其他請求。


我使用了Excel自己的狀態欄(在窗口左下角)來顯示我過去開發的類似應用程序的進度信息。

如果你只是想顯示進度的文本更新,並且完全避免需要更新對話框,那麼它會很好地工作。

好的@JonnyGold,這裡是我使用的那種東西的例子...

Sub StatusBarExample()
    Application.ScreenUpdating = False 
    ' turns off screen updating
    Application.DisplayStatusBar = True 
    ' makes sure that the statusbar is visible
    Application.StatusBar = "Please wait while performing task 1..."
    ' add some code for task 1 that replaces the next sentence
    Application.Wait Now + TimeValue("00:00:02")
    Application.StatusBar = "Please wait while performing task 2..."
    ' add some code for task 2 that replaces the next sentence
    Application.Wait Now + TimeValue("00:00:02")
    Application.StatusBar = False 
    ' gives control of the statusbar back to the programme
End Sub

希望這可以幫助!


下面的代碼在Excel(XP或更高版本)中執行操作時效果很好。

對於在Excel之外發生的操作,例如連接到數據庫並檢索數據,這個提供的最好的機會是在操作之前和之後顯示對話(例如“獲取數據” 獲取 數據”

創建一個名為“frmStatus”的表單,在名為“Label1”的表單上放置一個標籤。

設置窗體屬性“ShowModal”= false ,這允許代碼在窗體顯​​示時運行。

Sub ShowForm_DoSomething()

    Load frmStatus
    frmStatus.Label1.Caption = "Starting"
    frmStatus.Show
    frmStatus.Repaint
'Load the form and set text

    frmStatus.Label1.Caption = "Doing something"
    frmStatus.Repaint

'code here to perform an action

    frmStatus.Label1.Caption = "Doing something else"
    frmStatus.Repaint

'code here to perform an action

    frmStatus.Label1.Caption = "Finished"
    frmStatus.Repaint
    Application.Wait (Now + TimeValue("0:00:01"))
    frmStatus.Hide
    Unload frmStatus
'hide and unload the form

End Sub

在工作簿中插入一張空白紙張重命名工作表例如。 “信息”

Sheets("information").Select
Range("C3").Select
ActiveCell.FormulaR1C1 = "Updating Records"
Application.ScreenUpdating = False
Application.Wait Now + TimeValue("00:00:02")

繼續宏

Sheets("information").Select
Range("C3").Select
Application.ScreenUpdating = True
ActiveCell.FormulaR1C1 = "Preparing Information"
Application.ScreenUpdating = False
Application.Wait Now + TimeValue("00:00:02")

繼續宏

等另外,也可以在現有工作表的某處選擇一個空白單元,而不是插入一個新工作表

Range("C3").Select
ActiveCell.FormulaR1C1 = "Updating Records"
Application.ScreenUpdating = False
Application.Wait Now + TimeValue("00:00:02")

等等







excel-vba