2016-09-02 2 views
1

Очень начинающий пользователь, испытывающий трудности с запуском этого кода. Я пытаюсь вычислить значение, основанное на некоторых других ячейках, и выполнить итерацию, чтобы свести к минимуму ошибку. При запуске я получаю вышеупомянутую ошибку на строке Cells (i, 17) = Cells (i, 5). Мысли? Спасибо.Ошибка во время выполнения Excel VBA 1004: Определенная пользователем или объектно-ориентированная ошибка

Private Sub CommandButton1_Click() 
Dim i As Long 
A = 6.112 
B = 17.67 
C = 243.5 
epsilon = 0.622 
G = B * C 
maxerror = 0.001 
For i = 2 To Rows.Count 
Next i 
iter = 0 
Cells(i, 17) = Cells(i, 5) 

    Do While iter < 50 
     iter = iter + 1 
     bt = B * Cells(i, 17) 
     tpc = Cells(i, 17) + C 
     d = (Cells(i, 9)/A) * Exp(-bt/tpc) 
     dm1 = d - 1# 
     f = (Cells(i, 5) - Cells(i, 17)) - Cells(i, 16) * (epsilon/dm1 - Cells(i, 13)) 
     df = -G/(tpc * tpc) 
     df = d * df * Cells(i, 16) * epsilon/(dm1 * dm1) - 1# 
     cor = f/df 
     Cells(i, 17) = Cells(i, 5) - cor 
     If Abs(cor) < maxerror Then 
      Exit Do 
     End If 
    Loop 


End Sub 
+0

Что вы пытаетесь сделать при установке 'Cells (I, 17) = Cells (I , 5) '? Установите значение в ячейке «Ячейки (i, 17)», равное значению, находящемуся в настоящее время в «Ячейках (i, 5)»? И что такое 'For Loop'? Прямо сейчас он проходит весь цикл, прежде чем перейти к вашей переменной iter, поэтому результаты вашего цикла for будут одинаковыми каждый раз. –

ответ

2

Проблема здесь состоит в том, что цикл for увеличится i за Rows.Count. Это означает, что Cells(i, 17) = Cells(i, 5) фактически ссылается на строку сразу после в конце таблицы.

Как правило, мы не использовали i после Next i. Обычно мы используем только переменную между For и Next. Мне непонятно, чего вы ожидаете от цикла For...Next, потому что они обычно используются для выполнения некоторого кода много раз, просто изменяя переменную каждый раз.

Одна вещь, которая может показаться вам полезной: вы можете выполнить код за строкой, используя F8. Затем вы можете проверить переменные и другие вещи, чтобы убедиться, что они такие, как вы ожидаете.

5

При выходе из этого цикла, то значение i фактически количество строк в листе +1, который вызывает ошибку - вы пытаетесь ссылаться на строку, которая не существует.

Если вы хотите последнюю строку в листе просто использовать:

Dim i As Long 
i = Rows.Count 

Пояснение:

For i = 1 To 10 
    Debug.Print i '// Prints 1,2,3,4,5,6,7,8,9,10 as expected 
Next i '// When i = 10 and gets to this line, it still 
     '// increases the value before it exits the loop 

Debug.Print i '// Prints 11 
+0

Хороший улов и объяснение только того, как 'i' он увеличился в' For ... Next'. – Jeeped

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

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