我创建了这个宏来纠正错误(填补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
谢谢
答案 0 :(得分:2)
如果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
两种变体。它们可能应该是整数。
最终评论:使用缩进格式化代码。如果格式正确,理解它正在做什么要容易得多。