访问TextBox不会在VBA循环期间更新,仅在之后

时间:2015-01-06 11:55:21

标签: vba ms-access textbox access-vba

使用VBA进行访问。

我有一个非常简单的假设,我在网上看到了一些不同的解决方案,但不适用于我。

我有一个带有文本框的表单需要在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

textbox controlsource是strStatus(通过函数)。

每个循环大约需要4秒钟(查询),所以不是因为它在2毫秒内完成。

仅在for循环结束时更新。

奇怪的是,如果我在循环运行时使用光标并手动点击文本框,它实际上有效.........

所以问题是,如何让它更新" live"无需用鼠标/光标点击文本框?这对状态显示来说不方便。

请帮助......:)

最诚挚的问候,埃米尔。

1 个答案:

答案 0 :(得分:2)

我不确定它无法更新文本框的根本原因是什么,但添加一行就解决了这个问题。将焦点设置为您正在更新的文本框(单击它时正在执行的操作)会使其更新。

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