2015-10-16 4 views
0

Выполнение обратного цикла в Excel VBA, ища последнюю заполненную ячейку в определенном столбце. После обнаружения он должен выйти из цикла, но Exit 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 с меткой, но это может вызвать больше путаницы, чем цикл, если он не используется должным образом :) –

Смежные вопросы