在Excel vba中停止do TILL循环

在Excel vba中停止do TILL循环,excel,do-loops,vba,Excel,Do Loops,Vba,我创建这个宏是为了纠正一个错误(填补非闰年2月29日创建的空白),我一直面临停止Do-till循环的问题 宏执行它应该执行的操作,但在ActiveSheet之前,它不会像使用do时那样工作。单元格(3,x)=“2012”我希望在单元格(3,x)为2012时停止 谢谢如果列x第3行中的值为“2012”,则循环设置为退出 您将x初始化为3,然后检查第3行中的年份是否为闰年。如果是,则只能递增x,因此除非列“C”中的年份是闰年,x将永远不会递增 请尝试以下方法: Sub Feb_CORRECTION(

我创建这个宏是为了纠正一个错误(填补非闰年2月29日创建的空白),我一直面临停止Do-till循环的问题

宏执行它应该执行的操作,但在ActiveSheet之前,它不会像使用
do时那样工作。单元格(3,x)=“2012”
我希望在单元格(3,x)为2012时停止


谢谢

如果列
x
第3行中的值为“2012”,则循环设置为退出

您将
x
初始化为3,然后检查第3行中的年份是否为闰年。如果是,则只能递增
x
,因此除非列“C”中的年份是闰年,
x
将永远不会递增

请尝试以下方法:

Sub Feb_CORRECTION()
Dim i As Integer
Dim x As Integer

Dim year As Integer
Dim leapyear As Integer

    Range("c64").Select
    x = 3

    Do Until ActiveSheet.Cells(3, x) = "2012"
        year = ActiveSheet.Cells(3, x)
        leapyear = year Mod 4

        If leapyear > 0 Then
            Range(ActiveCell, ActiveCell.End(xlDown)).Select
            Selection.Cut
            ActiveCell.Offset(-1, 0).Select
            ActiveSheet.Paste
            ActiveCell.Offset(1, 1).Select
        Else
            ActiveCell.Offset(0, 1).Select
        End If

        ' increment x regardless of leap year status
        x = x + 1
    Loop

End Sub
您还可以将多个变量声明为变量,这是一个坏主意,除非您有非常具体的理由使用它们。变体可能导致很难追踪的bug。我已经在上面的片段中修复了这个问题

请注意,代码中的这一行将
i
声明为变量,将
x
声明为整数:

Dim i, x As Integer
您还将
year
leapyear
声明为变体。它们可能应该是整数


最后的评论:用缩进格式化代码。如果格式正确,则更容易理解它在做什么。

确保比较相同的数据类型。由于“2012”是一个字符串,请尝试将其与CStr(ActiveSheet.Cells(3,x).Value)进行比较。此外,请尝试逐步检查代码,以确保条件与您认为的条件相同。
Dim i, x As Integer