我想知道我的编码有什么问题,因为我无法在Microsoft Excel VBA中结束我的循环操作。如果下一行是空白的话,我希望以while循环结束。
Do While Cells(RowName, 1) <> ""
Name = Cells(RowName, ColumnName)
MsgBox Name
RowName = RowName + 1
Loop
请告诉我,因为我还是初学者。 MsgBox一直弹出,即使它是空白也不会结束。
答案 0 :(得分:3)
Sankar Balasubramanian的回答非常接近,但有一些问题。这是我将如何做到这一点。不做空时退出并且如果修剪值是空白字符串则退出。
Sub SampleEnding()
Dim ws As Worksheet: Set ws = ActiveSheet
Dim RowNum As Long: RowNum = 1
Dim ColNum As Long: ColNum = 3
Dim Name As String
Do While Not IsEmpty(ws.Cells(RowNum, 1))
If Trim(ws.Cells(RowNum, 1).Value) <> "" Then
Name = ws.Cells(RowNum, ColNum)
MsgBox Name
Else
Exit Do
End If
RowNum = RowNum + 1
Loop
End Sub
RowNum应始终声明为Long以避免溢出错误,因为Excel有超过一百万行。
如果声明并设置工作表变量,它也会更好更清晰。您应始终避免使用不合格的范围/单元格引用。
答案 1 :(得分:2)
&#34;退出Do&#34; - 您可以在任何希望循环停止的地方使用此命令。
Sub ExitDoSample
Dim rowname As Integer
Dim ColumnName As Integer
rowname = 1
ColumnName = 1
Do While Cells(RowName, 1) <> ""
Name = Cells(rowname, ColumnName).Value
If Name = "" Or IsEmpty(Name) Then
Exit Do
Else
MsgBox Name
End If
rowname = rowname + 1
Loop
End Sub
答案 2 :(得分:0)
您正在检查第1列中的RowName行是否为空,但您是从ColumnName列中获取名称,该列可能不是第1列。 因此第1列可能包含数据(因此检查通过并且循环继续)但列号为。 ColumnName可能为空,因此您的消息框显示空白。 这可能是问题吗?