2013-12-02 7 views
1

Только что началось программирование в VBA, у меня есть проблема, и я не знаю, как это решить. Я думаю, все в порядке. При запуске этого макроса отображается ошибка «6» переполнения во время выполнения.Excel VBA: ошибка переполнения

Sub Działaj() 
Dim Tablica(1 To 5000) As String 
Dim Dni() 
Dim kolumna As Integer 
Dim wiersz As Integer 
Dim licznik As Integer 
Dim PF As Boolean 
Dim tmp As Integer 
Dim i As Integer 
Dim tmp2 As String 
licznik = 2 
tmp = 0 
PF = False 
kolumna = 22 
wiersz = 2 
Do 
    If Worksheets("Początkowe").Cells(wiersz, kolumna).Value <> vbNullString Then 
     For i = 1 To licznik 
      If Worksheets("Początkowe").Cells(wiersz, kolumna).Value = Tablica(i) Then 'debugger shows problem here i guess 
       PF = True 
       tmp = i 
      End If 
     Next i 
    End If 
    If Worksheets("Początkowe").Cells(wiersz, kolumna).Value = "koniec" Then 
     Exit Do 
    End If 
    wiersz = wiersz + 1 
Loop 
End Sub 

Может ли кто-нибудь сказать мне, где я совершил ошибку? Я буду очень признателен.

+1

Одно из которых вы не указали в Tablica (i). Во-вторых, если вы не найдете значение koniec, тогда цикл будет продолжаться до тех пор, пока вы не вырастут из целочисленной переменной wiersz, вокруг 32k. – nutsch

+0

Что значит сказать: «Вы не указали какую-либо ценность в Tablica (i)», можете ли вы привести мне пример? Не беспокойтесь о «koniec», это будет в конце всех данных во всех столбцах. – Domin1992

+0

Извините, вы были правы насчет "koniec" тоже :) Спасибо. – Domin1992

ответ

4

Если вы не найдете значение koniec перед строкой 32767, ваша переменная wiersz будет максимальной. Если вы хотите продолжить это, вы должны переопределить его как Long.

Вы также должны предоставить выход для своего цикла, например. существующий в последней используемой строке. Вместо do ... loop, я обычно использую следующий код:

Dim lLastRow As Long, lWiersz As Long 

lLastRow = Cells(Rows.Count, kolumna).End(xlUp).Row 

For lWiersz= 1 To lLastRow 


Next lWiersz 
+0

Yap, спасибо, это было правильно, я забыл про «конец» за столом и столом. Я не могу установить «if», чтобы проверить, не является ли ячейка пустой, поскольку в середине таблицы есть несколько ячеек. Еще раз спасибо. – Domin1992

+0

Что я обычно делаю в этом случае, это следующий ... а не цикл do ... см. Прилагаемый пример – nutsch

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