Excel VBA: предоставление значений массива в качестве ограничений «для цикла»

#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