Access TextBox 在 VBA 循环期间不更新,仅在
Access TextBox does not update during VBA loop, only after
正在使用 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
文本框控件源是 strStatus(通过函数)。
每个循环大约需要 4 秒(查询),所以它不是因为它在 2 毫秒内结束。
它仅在 for 循环完成时更新。
奇怪的是,如果我在循环运行时使用光标并手动单击文本框,它确实有效......
所以问题是,如何让它更新 "live" 而不必单击带有 mouse/curser 的文本框?状态显示不方便
求助...:)
最好的问候,埃米尔。
我不确定无法更新文本框的根本原因是什么,但是添加一行就解决了这个问题。将焦点设置到您正在更新的文本框(这是您单击它时正在做的事情),导致它更新。
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
正在使用 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
文本框控件源是 strStatus(通过函数)。
每个循环大约需要 4 秒(查询),所以它不是因为它在 2 毫秒内结束。
它仅在 for 循环完成时更新。
奇怪的是,如果我在循环运行时使用光标并手动单击文本框,它确实有效......
所以问题是,如何让它更新 "live" 而不必单击带有 mouse/curser 的文本框?状态显示不方便
求助...:)
最好的问候,埃米尔。
我不确定无法更新文本框的根本原因是什么,但是添加一行就解决了这个问题。将焦点设置到您正在更新的文本框(这是您单击它时正在做的事情),导致它更新。
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