如何使用按钮在Excel中停止For ... Next?

时间:2016-02-02 18:56:15

标签: excel vba excel-vba

以下代码是我在网上找到的解决方案中修改的内容。表格的上下文。

表单有一个带3个按钮的组合框(Add,Next,Done)

  • 添加将粘贴从组合框中选择的任何内容
  • 接下来应该移动到列中的下一个空单元格(下面的代码)
  • 完成后应关闭表单,以便查看电子表格。(下面的代码)

我遇到的是,当我点击“完成”按钮时,如果我跑“下一步”,它就不会关闭。 For ... Next循环一直持续到所有空格都被填满。我想要的是一种方法,当我点击“完成”时停止for循环我已经尝试添加一个语句来显示当前单元格是否有要退出的字符但是它只是杀死了代码而它根本不会运行。所以我现在不知所措,如果有人能够提供帮助那就太好了。谢谢。

Private Sub nxtBtn_Click()

Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer
Dim currentRowValue As String, cString As String


sourceCol = 7   'column G has a value of 7
rowCount = Cells(Rows.count, sourceCol).End(xlUp).Row

'for every row, find the first blank cell and select it

For currentRow = 4 To rowCount
    currentRowValue = Cells(currentRow, sourceCol).Value
    If IsEmpty(currentRowValue) Or currentRowValue = "" Then
        Cells(currentRow, sourceCol).Select
        End If
    Next

End Sub

Private Sub done_bn_Click()


    'Refresh the workbook/pivot tables
    ThisWorkbook.RefreshAll

    'Close form
    Unload Me

End Sub

2 个答案:

答案 0 :(得分:1)

只需使用Range.Find方法,而不是使用循环来查找F列中的第一个空白单元格。您可以使用以下一行替换整个循环:

Columns("F").Find(vbNullString, Range("F3"), xlValues, xlWhole).Select

这样你就不必退出代码执行了,因为这会在单元格F3之后找到F列中的第一个空白单元格(我猜的是标题),不需要循环。

答案 1 :(得分:0)

您需要暂停循环并检查发送到程序的任何事件。

在VBA中,有DoEvents函数。通俗地说,这使得该计划能够“赶上自己”。所以,我建议在你的循环中添加一个DoEvents,然后检查击键。您想要捕获Ctrl / Break键,这将暂停VBA。

我在想这样的事情:

Private Sub nxtBtn_Click()

Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer
Dim currentRowValue As String, cString As String


sourceCol = 7   'column F has a value of 7
rowCount = Cells(Rows.count, sourceCol).End(xlUp).Row

'for every row, find the first blank cell and select it

For currentRow = 4 To rowCount
    currentRowValue = Cells(currentRow, sourceCol).Value
    If IsEmpty(currentRowValue) Or currentRowValue = "" Then
        Cells(currentRow, sourceCol).Select
        End If

    'Allow the code to catch up, so it can determine if Ctrl/Break were sent
    DoEvents
    Next

End Sub

Private Sub done_bn_Click()

    'Send the Ctrl/Break keys to Excel
    Application.SendKeys("^{BREAK}")

    'Refresh the workbook/pivot tables
    ThisWorkbook.RefreshAll

    'Close form
    Unload Me

End Sub