2012-09-09 196 views
0

我創建了這個宏來糾正一個錯誤(填補2月29日在非閏年創建的空白)我一直在停止Do Until循環中遇到問題。在Excel-vba中停止循環直到循環

宏做的事情是應該做的,但與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

確保您比較相同的數據類型。由於「2012」是一個字符串,因此請嘗試將其與「CStr(ActiveSheet.Cells(3,x).Value)」進行比較。 –

+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 

你也宣告雙方yearleapyear的變種。他們應該可能是整數。

最終評論:使用縮進格式化您的代碼。如果格式正確,理解它在做什麼更容易。