以下While循环用于迭代列,直到找到两个连续的空白单元格。一旦curCell为空,它就会退出,忽略lastCell中的值。在调试时,我已经验证lastCell有一个值并且不为空,但循环仍然退出。我的And声明出了什么问题?
While (lastCell <> "") And (curCell <> "")
lastCell = curCell
ActiveCell.Offset(1, 0).Select
curCell = ActiveCell
Wend
答案 0 :(得分:4)
您应该使用Or而不是And。
并且要求这两个语句都为真,以便while循环继续。如果其中一个语句为假(如果一个单元格为空),则while循环将退出。
使用或,while语句将继续,直到两个单元格都为空。
答案 1 :(得分:1)
如果可以的话,这是一个更好的方法来做你正在尝试的事情,因为它从第二行一直看到最后一行。当它发现前两个单元格都是空的时,它会停止。
Sub findTwoEmptyCells()
Dim lastRow As Long, i As Long
Dim firstEmptyCell As Range
lastRow = Cells(Rows.Count, 1).End(xlUp).Row ' Assuming your column A has the most data or is the row you want to check.
For i = 1 To lastRow
If Cells(i, 1).Value = "" And Cells(i, 1).Offset(1, 0).Value = "" Then
Set firstEmptyCell = Cells(i, 1)
Exit For
End If
Next i
'Now, you have a cell, firstEmptyCell, which you can do things with, i.e.
firstEmptyCell.Value = "Empty!"
End Sub
编辑:此外,即使 连续没有两个空单元格,也请在firstEmptyCell.Value
之前添加:
If firstEmptyCell Is Nothing Then ' If there are no two empty cells in a row, exit the sub/do whatever you want
MsgBox ("There are no two empty cells in a row")
Exit Sub
End If
Edit2:正如@MatsMug所指出的,假设您不更改/使用多个工作表,这将正常工作。如果您这样做,请在Cells()
之前添加工作表名称,即Sheets("Sheet1").Cells(...)
。
答案 2 :(得分:0)
除了改进代码的其他注释外,还有原始的逻辑检查: 而(lastCell&lt;&gt;“”)和(curCell&lt;&gt;“”) 本来应该: 而不是(lastCell =“”和curCell =“”) 因为这样循环运行直到last和current都为空,这就是你要找的东西。
答案 3 :(得分:0)
我使用的是类似的东西:
Dim RowStaff as Integer
RowStaff = 1
While (.Cells(RowStaff + RowHeader, ColStatus) <> "") Or (.Cells(RowStaff + RowHeader + 1, ColStatus) <> "")
'Code goes here
RowStaff=RowStaff+1
Wend
其中RowHeader和ColStatus都是常量
显然(希望如此)我选择的名称特定于我的任务,但根据需要进行调整/省略...