#arrays #excel #vba #for-loop #syntax-error
#массивы #excel #vba #для цикла #синтаксическая ошибка
Вопрос:
Я сталкиваюсь с «Ошибкой компиляции: синтаксическая ошибка» при запуске следующего кода:
c_bound_h() — это массив с индексами от 0 до j . Предположим, что значение j равно 3 (для этого примера), а значения в нем приведены ниже. Данные в строках листа сортируются в соответствии с этими ограничениями. например, от row2 до row1507 = ‘Значение 1’, от row 1508 до row3013 = ‘Значение 2’ и так далее.
Я хочу перебирать каждый класс данных, передавая эти ограничения в цикле For. Но это выдает синтаксическую ошибку.
j = 3
c_bound_h(0) = 2
c_bound_h(1) = 1508
c_bound_h(2) = 3014
c_bound_h(3) = 4519
«Я хочу перебирать каждый класс данных, передавая эти ограничения в цикле For. Но это выдает синтаксическую ошибку.
For L = 0 To j
For c_bound_h(L) To c_bound_h(L 1)-1
Next L
Ответ №1:
Измените код следующим образом:
For L = 0 To j
For K= c_bound_h(L) To c_bound_h(L 1)-1
Next K
Next L
Ответ №2:
Используйте для L = 1- J-1….
Потому что c_bound_h (L 1) в противном случае был бы вне пределов
Ответ №3:
Вы объявляете c_bound_h как целое число?
Я поместил этот код в рабочую книгу, и он отлично работает для меня :-
Sub test()
j = 3
Dim c_bound_h(4) As Integer
c_bound_h(0) = 2
c_bound_h(1) = 1508
c_bound_h(2) = 3014
c_bound_h(3) = 4519
For L = 0 To j
For k = c_bound_h(L) To c_bound_h(L 1) - 1
MsgBox ("pass")
Next k
Next L
End Sub
Ответ №4:
Необходимо предотвратить ненужные циклы, сравнивая 2 значения одновременно, но не выходя за пределы массива. Это основано на коде «Don Relentless», но немного изменено.
Sub test()
j = 3
Dim c_bound_h(0 to 3) As Integer
c_bound_h(0) = 2
c_bound_h(1) = 1508
c_bound_h(2) = 3014
c_bound_h(3) = 4519
For L = 1 To j
For k = c_bound_h(L-1) To c_bound_h(L) - 1
debug.print "pass row " amp; k
Next k
Next L
End Sub