以下代码是我在网上找到的解决方案中修改的内容。表格的上下文。
表单有一个带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
答案 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