Vba 退出Do-While循环

Vba 退出Do-While循环,vba,excel,Vba,Excel,我已经将此子代码作为更大代码的一部分编写。实际上,我要做的是沿着C列,复制有值的地方,直到我点击“End”并粘贴到“L1”。如果单元格中没有值,我不希望循环结束,因为会有间隙。当我试图运行代码时,它会陷入循环而不退出 Sub LoopEmailAdd() Dim i As Long i = 1 Do While Cells(1, "C").Value = "Email" If Cells(1 + i, "C").Value <> Empty And Cells(1 +

我已经将此子代码作为更大代码的一部分编写。实际上,我要做的是沿着C列,复制有值的地方,直到我点击“End”并粘贴到“L1”。如果单元格中没有值,我不希望循环结束,因为会有间隙。当我试图运行代码时,它会陷入循环而不退出

Sub LoopEmailAdd()

Dim i As Long

i = 1

Do While Cells(1, "C").Value = "Email"
    If Cells(1 + i, "C").Value <> Empty And Cells(1 + i, "C").Value <> "End" Then
        Cells(1 + i, "C").Copy _
        Destination:=Range("L1")
        i = i + 1
    ElseIf Cells(1 + i, "C").Value = "End" Then
        Exit Do
    End If
Loop

End Sub     
Sub-LoopEmailAdd()
我想我会坚持多久
i=1
Do While单元格(1,“C”).Value=“电子邮件”
如果单元格(1+i,“C”)值为空,单元格(1+i,“C”)值为“结束”,则
单元格(1+i,“C”)。副本_
目的地:=范围(“L1”)
i=i+1
ElseIf单元格(1+i,“C”)。Value=“End”然后
退出Do
如果结束
环
端接头

根据您的描述,您可以松开循环并使用
Find
,请尝试以下代码:

Option Explicit

Sub LoopEmailAdd()

Dim FindRng As Range

Set FindRng = Columns(3).Find("End")

' make sure Find was successful finding "End"
If Not FindRng Is Nothing Then
    Cells(FindRng.Row - 1, "C").Copy Range("L1")
Else ' in case Find failed
    MsgBox "Unable to find End in column C", vbCritical
End If

End Sub

将空替换为“”,然后重试。学习调试。注意每个循环后i的值。@D\u最好的问题不是我不知道如何调试。。。问题是我无法摆脱这个循环。单元格的值不会发生任何变化,因为代码的第一部分做了我希望它做的事情。我失败的地方是想办法触发循环停止(在我的例子中是“结束”)
Empty
并不意味着你认为它会做什么。使用
IsEmpty
函数检查
Empty
,当单元格的值是一个没有值的
变量
时,该函数返回
True
,该变量甚至没有空字符串。