2015-10-16 112 views
0

在Excel VBA中執行反向循環,查找某個列中最後一個已填充的單元格。一旦找到,它應該退出循環,但退出For不工作,並繼續循環回來。有任何想法嗎?'退出'不起作用

rewind: 
'   so we 're still "under", rollback to the right line 
      While Not Range("I" & a).Value = getsum 
       a = a - 1 
       On Error GoTo TryCatch 
       If Not Range("E" & a).Value = "" Then 
        Rows(a).Select 
        currfield = Range("E" & a).Value 
        runningstrsum = runningstrsum - currentstrsum 'we're switching streets 
'     and since we just lost currentstrsum, we have to reset it to the last one, yay 
        For c = a - 1 To 2 Step -1 
         If Not Range("E" & c).Value = "" Then 'there it is 
          currentstrsum = Range("E" & c).Value 
          Exit For 
         End If 
        Next c 
       End If 
      Wend 
      If overunder < 0 Then 'go back to overunder< 
       GoTo goodjobunder 
      ElseIf overunder = 0 Then 
       GoTo goodjobeven 
      End If 

回答

5

你只是退出內部循環,代碼將恢復超出這個循環 - 這仍然是While循環中,因此重新進入For循環。

如果你想找到的最後一個單元格填充一列中只使用類似:

Dim lastCell As Excel.Range 
Set lastCell = Range("E" & Rows.Count).End(xlUp) 

無需循環。

也可能是一個好時機,看看Debugging VBA Code

+1

偉大的答案,無需環路找到最後一個單元格。作爲附註,您可以通過設置「標誌」來告訴進程何時退出其他循環,從而退出多個循環。在這裏搜索應該會產生多個結果。 – Kyle

+1

你也可以使用帶有標籤的'GoTo'語句 - 但如果沒有正確使用,會導致比循環更多的困惑:) –