0

我创建了这个宏来纠正一个错误(填补非闰年 2 月 29 日创建的空白)我在停止执行直到循环时遇到了问题。

宏做了它应该做的事情,但它没有按预期工作,Do Until ActiveSheet.Cells(3, x) = "2012"我希望它在单元格(3,x)是 2012 时停止

Sub Feb_CORRECTION()
Dim i, x As Integer
Dim year
Dim leapyear

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
x = x + 1
End If
Loop

End Sub

谢谢你

4

1 回答 1

2

如果列中第 3 行的x值为“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

您也有几个变量声明为变体,这是一个坏主意,除非您有非常具体的原因使用它们。变体可能会导致难以追踪的错误。我已经在上面的代码段中解决了这个问题。

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

Dim i, x As Integer

您还声明了yearleapyear作为变体。它们可能应该是整数。

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

于 2012-09-09T16:51:02.777 回答