首页 > 解决方案 > 当用户单击用户窗体上的 X 按钮时如何退出循环?

问题描述

我在下面有 vba 代码,可以在用户窗体界面上逐行编辑:

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_QueryClose被调用以从第一个代码块中退出循环,我该怎么听。

标签: excelvba

解决方案


不支持多线程,我认为这是不可能的。

如果您真的坚持询问用户是否暂停,最好If在运行时简单地询问条件。

例如。

For i = 1 to myRange.Cells.Count

 ' your code here...

 If i = myRange.Cells.Count / 2 Then
    If MsgBox("Continue to the for loop?", vbYesNo) = vbNo Then
       UnLoad MyForm
       Exit For
    End If
 End If

Next i

推荐阅读