Excel 当用户单击userform上的X按钮时,如何退出循环?
我有下面的vba代码,可以在userform界面上逐个编辑每一行:Excel 当用户单击userform上的X按钮时,如何退出循环?,excel,vba,Excel,Vba,我有下面的vba代码,可以在userform界面上逐个编辑每一行: Private Sub CommandButton1_Click() Dim MyRange As Range Dim cell As Range Set MyRange = Range("A2", Range("A2").End(xlDown)) For Each cell In MyRange cell.Select 'Build
Private Sub CommandButton1_Click()
Dim MyRange As Range
Dim cell As Range
Set MyRange = Range("A2", Range("A2").End(xlDown))
For Each cell In MyRange
cell.Select
'Build form
MyForm.Title.Caption = cell.Offset(0, 2)
If cell.Offset(0, 2) = 1 Then
MyForm.Checked.Value = True
Else
MyForm.Checked.Value = False
End If
'Show form
MyForm.Show
Next cell
End Sub
我有数千行,我需要给用户一些休息
如果用户单击X按钮,我希望此过程暂停,但我找不到退出循环的方法
我的用户表单代码如下所示:
Private Sub Checked_Click()
If MyForm.Checked.Value = True Then
ActiveCell.Offset(0, 1).Value = 1
Else
ActiveCell.Offset(0, 1).Value = ""
End If
End Sub
Private Sub DoneButton_Click()
ActiveCell.Offset(0, 2).Value = 1
Unload MyForm
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
MsgBox "paused"
End If
End Sub
我想完成什么?
当用户单击X按钮关闭userform时,我需要在第一个代码块处停止每个循环。但如果调用
UserForm\u QueryClose
从第一个代码块退出循环,我不知道如何倾听。遗憾的是,我认为这是不可能的,因为它不支持多线程
如果您确实坚持要求用户是否暂停,那么最好在运行时简单地询问If
条件
例如
遗憾的是,我认为这是不可能的,因为它不支持多线程 如果您确实坚持要求用户是否暂停,那么最好在运行时简单地询问
If
条件
例如
您需要添加DoEvents来检查用户交互。但是,仅仅关闭表单不会停止代码的运行,因此您需要添加另一个控制器 比如说
Option Explicit
Private stopCode As Boolean
Private Sub UserForm_Click()
Dim i As Long
stopCode = False
For i = 1 To 1000000
Debug.Print i
DoEvents
If stopCode = True Then Exit For
Next
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If MsgBox("Do you want to stop", vbQuestion + vbYesNo) <> vbYes Then Cancel = True
stopCode = True
End Sub
选项显式
作为布尔值的私有停止码
私有子用户表单_Click()
我想我会坚持多久
stopCode=False
对于i=1到1000000
调试.打印i
多芬特
如果stopCode=True,则退出
下一个
端接头
私有子用户表单_QueryClose(取消为整数,关闭模式为整数)
如果MsgBox(“是否要停止”,vbQuestion+vbYesNo)vbYes,则Cancel=True
stopCode=True
端接头
当用户关闭表单时,将询问他们是否要停止代码。如果他们说是,则关闭表单,但停止代码“控制器”也确保停止运行代码。您需要添加DoEvents以检查用户交互。但是,仅仅关闭表单不会停止代码的运行,因此您需要添加另一个控制器 比如说
Option Explicit
Private stopCode As Boolean
Private Sub UserForm_Click()
Dim i As Long
stopCode = False
For i = 1 To 1000000
Debug.Print i
DoEvents
If stopCode = True Then Exit For
Next
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If MsgBox("Do you want to stop", vbQuestion + vbYesNo) <> vbYes Then Cancel = True
stopCode = True
End Sub
选项显式
作为布尔值的私有停止码
私有子用户表单_Click()
我想我会坚持多久
stopCode=False
对于i=1到1000000
调试.打印i
多芬特
如果stopCode=True,则退出
下一个
端接头
私有子用户表单_QueryClose(取消为整数,关闭模式为整数)
如果MsgBox(“是否要停止”,vbQuestion+vbYesNo)vbYes,则Cancel=True
stopCode=True
端接头
当用户关闭表单时,将询问他们是否要停止代码。如果他们说是,它会关闭表单,但停止代码“控制器”也会确保正在运行的代码被停止。@Rawrplus是正确的,在附近的一列中填写“已完成”并让表单循环找到用户在打开时停止的位置如何?@StevenCarlson,当前代码会这样做,问题是,如果用户使用X按钮退出用户表单,用户表单将再次提示下一行。@Rawrplus是正确的,在附近的一列中填写“已完成”并让表单循环找到用户未打开的位置如何?@StevenCarlson,当前代码执行此操作,问题是如果用户使用X按钮退出用户表单,下一行将再次提示userform。