2015-01-06 42 views
1

中使用VBA進行訪問。在VBA循環期間訪問TextBox不會更新,只有在

我有一個相當簡單的問題,我在網上看到一些不同的解決方案,但其中沒有一個適合我。

我有一個表單需要在for循環中更新的文本框。 我已經減少了腳本如下:

For counter = 1 To 100 

Application.Echo False 
DoCmd.OpenQuery "Query1" 
DoCmd.Close 
Application.Echo True 

strStatus = "Loop is " & counter & " % done" 
Call dsp_progress_AfterUpdate 
Me.Refresh 
DoEvents 

Next 

並稱爲子多數民衆贊成:

Private Sub dsp_progress_AfterUpdate() 
Me.Dirty = False 
End Sub 

文本框控件是strStatus(通過函數)。每個循環大約需要4秒(查詢),所以它不是因爲它在2ms內結束。

它僅在for循環完成時更新。

奇怪的是,如果我使用光標和循環運行時在文本框中手動點擊,它的實際工作.........

所以現在的問題是,怎麼辦我讓它更新「生活」,而不必用鼠標/光標點擊文本框?這對狀態顯示來說不方便。

幫助,請... :)

最好的問候,埃米爾。

+0

那麼問題是什麼? – Gareth

+0

好吧,以爲它很清楚,我現在更新。最後見。 –

+1

你有沒有試過調用文本框本身的'.Requery'方法? –

回答

1

我不確定它沒有更新文本框的根本原因是什麼,但在一行中添加了修復此問題。將焦點設置到您正在更新的文本框(這是您單擊它時所做的操作),使其更新。

textBox.SetFocus 

在啓動循環之前將其添加到您的代碼中。

將代碼更改爲以下內容應該可以消除閃爍以及文本突出顯示的事實。

For counter = 1 To 100 
    Application.Echo False 
    DoCmd.OpenQuery "Query1" 
    DoCmd.Close 
    strStatus = "Loop is " & counter & " % done" 
    Call dsp_progress_AfterUpdate 
    Me.Refresh 
    TextBox.SetFocus 
    TextBox.SelStart = 0 
    TextBox.SelLength = 0 
    DoEvents 
    Application.Echo True 
Next 
+0

這實際上確實工作,但隨後文本被「突出顯示」,你知道,就好像我想要rightclick-copy或其他東西......而且有點華麗。 ..但至少它顯示了... 我仍然開放的建議,所以我會等待標記爲答覆。 –

+0

增加了一些額外的代碼來處理您的評論中的問題。 – KevenDenen

+0

非常感謝!工作正常現在! –