2017-05-03 92 views
0

問題:For currentRow = 25 To rowCount之後,for語句的其餘部分不斷跳過。For循環在VBA中沒有任何原因被跳過

我有兩個其他For語句之前有問題的代碼塊和他們的格式是相同的,這兩個工作正常。

Public Sub WeightB() 
    Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer 
    Dim currentRowValue As String 

    sourceCol = 7 
    rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row 

    For currentRow = 24 To rowCount 
     currentRowValue = Cells(currentRow, sourceCol).Value 
     If IsEmpty(currentRowValue) Or currentRowValue = "" Then 
      Cells(currentRow, sourceCol).Select 
      Exit For 
     End If 
    Next 
End Sub 

我已經提到For loops being skipped without cause in VBA,但仍然無法弄清楚這一點。

+1

在'For'循環之前'rowCount'的值是多少? – Bathsheba

+1

任何行計數應該是「長」而不是「整數」類型。您還應完全限定單元格:閱讀[VBA最佳實踐 - 永不假定工作表](http://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices/9218/never-assume-the-worksheet #T = 201704280559226199101)。 –

+0

我試過MsgBox rowCount,它顯示22. –

回答

2

如果rowCount,按您的明確意見,是22那麼你For循環變得

For currentRow = 24 To 22

這顯然是一個空操作,因爲沒有辦法24能數到22。如果你需要在最後數的方向來算,那麼你可以使用類似

For currentRow = 24 To rowCount Step Iif(rowCount - 24 < 0, -1, +1) 

,但是這真的是你想要做什麼?此外,開始使用Long類型的行和列號,現在工作表有超過32767行,並且在所有模塊的頂部使用Option Explicit來消除惱人的自發變量創建。

+0

值得一提的是,如果這是故意的,但你想從24跳到22(24,23,22),那麼OP應該使用'For currentRow = 22 To 24 Step -1' – Wolfie

+0

這就是我在第二個部分,innit。 – Bathsheba

+0

我可能回答你錯了。我試圖做的是從D24輸入數據到D42。但是我希望這個腳本找到那個範圍內的空單元格來輸入輸入。 –