【发布时间】:2013-05-22 23:22:47
【问题描述】:
这在 VBA 中似乎是一件很奇怪的事情,但我很好奇,所以请听我说完。 我创建了一个程序,可以在单击图像时在屏幕上移动图像。这行得通,虽然没问题,但仍然 - 它行得通。
代码如下:
'Start primitive animation
Private Sub imgBean_Click()
'Limit for movement to right
Dim coordinates, limit As Integer
coordinates = 0
limit = Form.Width
Do While coordinates < limit
coordinates = coordinates + 5
'Move the image
Me.imgBean.Move coordinates
'Needed to add this to see the image move - updates the form
Form.Repaint
Loop
Debug.Print "Coordinates " & coordinates
Debug.Print limit
'Reset the limit
limit = 0
End Sub
如前所述,代码有效 - 但是在图像移动时屏幕被冻结,即我无法关闭表单或与其他组件交互。 (这类似于在 Android 环境中阻塞 UI 线程——这是你永远不会做的事情!)
那么有没有办法避免这种情况?
谢谢
附:将焦点设置在表单上会使图像偶尔出现和消失。
【问题讨论】:
-
老实说,Microsoft Access 的多任务处理能力并没有得到特别的认可。我的大多数 VBA 应用程序(无论是 Access、Excel 还是 Outlook)都有同样的问题。
-
@dnLL 我知道,但我想我会碰碰运气:P
-
excel不支持多线程
-
@mehow 我没有使用 Excel - 我知道它在 VBA 中不受支持,所以我正在研究其他方法 - 遇到了类似的东西(类似于多线程),它利用了 VBScript,但不确定如果它适合我想要的 - 似乎它更适合网络抓取和那种性质的东西
-
您是否尝试在进入
Do While循环后立即添加DoEvents语句?它通常用于在执行紧密循环时启用与“其他事物”的交互,但在这种情况下它也可能会放松一些事情。详细信息here,请务必阅读文章末尾附近的“与 DoEvents 相关的问题”部分。
标签: vba ms-access-2007