使用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"无需用鼠标/光标点击文本框?这对状态显示来说不方便。
请帮助......:)
最诚挚的问候,埃米尔。
答案 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