2008-09-09 33 views
3

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

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

回答

2

下面的代碼在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 
0

對話框也在同一UI線程上運行。所以,它太忙而無法重新繪製自己。不確定VBA是否具有良好的多線程功能。

4

我已經使用了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 

希望這有助於!

+0

請你可以添加一個例子,謝謝。 – JonnyGold 2008-09-09 14:14:10

6

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

2

在工作薄中插入一張空白紙 重命名工作表例如: 「信息」

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")