我有一个循环作业但是在循环中我想用excel vba单击命令按钮这可能吗?
Sub workbook_open()
Dim c As Boolean
Dim choice As Range
Dim counter As Integer
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Riboon"",true)"
Sheets("psr").Activate
Do
If choice = ActiveSheet.Shapes.Range(Array("psrnew")).Select Then
psrnew_reqinfo.Show
c = False
Else
counter = counter + 1
Range("A1").Value = counter
'Application.Wait (Now + TimeValue("00:00:05"))
End If
Loop Until c = True
End Sub
答案 0 :(得分:0)
这里的问题实际上是关于中断代码的执行并将控制权传递给操作系统以处理消息队列(您的按钮点击事件将耐心地等待)。执行此操作的功能是DoEvents
(https://msdn.microsoft.com/en-us/vba/language-reference-vba/articles/doevents-function)。
您拨打DoEvents
的频率完全取决于您。很明显,你调用的越多(即中断你自己的代码),你的日常工作就越慢。还有其他与DoEvents
相关的问题,但文档应指出正确的方向。
作为您的场景的一个示例,您需要三个例程:一个处理按钮单击(如果它是一个ActiveX按钮,我假设其代码在包含您的按钮的工作表后面),一个在您的模块中使用click事件(在示例代码中,它将模块级别标志更改为False),而模块中的另一个用于运行循环(如果标志为False则结束)。所以......
模块代码
Option Explicit
Private mLeaveLoop As Boolean
Public Sub Main()
Const LIMIT As Long = 1000000
Dim counter As Long
mLeaveLoop = False
counter = 1
Do
counter = counter + 1
DoEvents
If counter = LIMIT Then Exit Do 'emergency exit to avoid infinite loop
Loop Until mLeaveLoop
Debug.Print "Stopped at " & counter
End Sub
Public Sub ConsumeButtonClick()
mLeaveLoop = True
End Sub
和您的图纸代码
Option Explicit
Private Sub CommandButton1_Click()
ConsumeButtonClick
End Sub