2013-05-16 51 views
0

这在VBA中看起来很奇怪,但我很好奇,所以请听我说。 我创建了一个在点击时在屏幕上移动图像的过程。尽管如此,它仍然有效,但仍然有效 - 它很有用。避免阻止用户与表单的交互 - 访问VBA 2007

下面是代码:

'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线程 - 你永远不会这么做!)

那么有没有办法避免这种情况?

谢谢

P.S.将焦点设置为表单会使图像偶尔出现并消失。

+0

说实话,微软Access并不是特别认可他的多任务功能。我与大多数VBA应用程序(无论是Access,Excel还是Outlook)都有同样的问题。 – dnLL

+0

@dnLL我知道但我认为我有机会:P – Katana24

+0

excel支持多线程isnt – 2013-05-16 14:47:22

回答

0

原来我没有找到一种方法来在视觉上阻止动画开始后与GUI的交互。我在视觉上说,因为可以在动画运行时点击按钮并输入输入。

它涉及使用DoEvents命令作为MS Access中多任务的一种方式。在我的我加do-while循环上面的命令(见下文):

'Essentially allow multitasking 
DoEvents 

Do While coordinates < limit 

    coordinates = coordinates + 5 

    'Move the image 
    Me.imgBean.Move coordinates 
    Form.Repaint 

Loop 

应当注意的是,当我把它在do-while循环没有工作。所以,当我通过点击图片开始动画时,我仍然可以按下其他按钮,因为我在一个字段中输入了一个值,然后单击一个按钮将其转换为另一个 - 而动画正在运行。

唯一的问题是如何在视觉上做到这一点。

+0

正如我上面所说的,“DoEvents”并不是真的可靠,所以使用它时要小心,并确保应用程序仍然可以在没有它的情况下工作。如果你想给操作系统多一点时间,你可以在'DoEvents'上循环(如果真的有帮助,因为在某些情况下它什么都不做)。 – dnLL