繁体   English   中英

在Excel-vba中停止do循环

[英]stopping a do until loop in Excel-vba

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

宏做了它应该做的但它没有按照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

谢谢

如果第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

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

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

Dim i, x As Integer

你还宣称year和年leapyear变种。 它们可能应该是整数。

最终评论:使用缩进格式化代码。 如果格式正确,理解它正在做什么要容易得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM