0

我有一个 VBA 子程序,它在电子表格中绘制一些形状并移动它们。这就是我的子程序所说的

Sub Assignment(amplitude As Double, deltaphase As Double)

我从表格中获取幅度和增量值。我的表单中有三个按钮“开始,暂停,恢复”。

我知道如何编写“开始”按钮。

Private Sub start_Click()

Dim formAmplitude As Double
Dim formPhase As Double

formAmplitude = assignmentform.ampbox.value
formPhase = assignmentform.phsbox.value

Call Assignment(formAmplitude, formPhase)

End Sub

但我不知道如何处理“暂停”和“恢复”按钮......

任何帮助将不胜感激

4

1 回答 1

0

我通常做的是告诉分配例程的等效项,用户可以看到什么用户表单,因此例程会定期(例如在循环/更新结束时)执行 DoEvents,让按钮单击事件在表单上进行处理。在Assignment 中调用DoEvents 后,您将检查表单上的布尔标志,例如“正在运行”,如果为假,则不继续。当然,“暂停”按钮单击事件必须将此运行标志设置为 false。

您确实应该让代码的初始化部分在与执行部分不同的函数中运行,这样您就可以初始化动画,打开表单,然后调用执行代码,当用户单击“播放”时,它将恢复任何动画”。

我希望这是有道理的,因为否则你必须有一个这样的循环:

Do While Frm.Running = False
    DoEvents
    Sleep 100
Loop

您必须在要检查暂停/恢复点击的任何地方执行此操作。DoEvents 调用让 Excel 在您单击 Resume 之前不会在将要运行的循环中冻结,并且睡眠是为了防止您的 CPU 利用率飙升。您必须为此使用适当的 Sleep Windows API 调用。

于 2013-05-20T14:48:03.233 回答