如何在VBA中结束do while循环

时间:2016-04-29 03:20:58

标签: excel vba loops

我想知道我的编码有什么问题,因为我无法在Microsoft Excel VBA中结束我的循环操作。如果下一行是空白的话,我希望以while循环结束。

Do While Cells(RowName, 1) <> ""
    Name = Cells(RowName, ColumnName)
    MsgBox Name
    RowName = RowName + 1
Loop

请告诉我,因为我还是初学者。 MsgBox一直弹出,即使它是空白也不会结束。

3 个答案:

答案 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可能为空,因此您的消息框显示空白。 这可能是问题吗?