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

Я сталкиваюсь с «Ошибка компиляции: ошибка синтаксиса», когда запускаю следующий код:

c_bound_h() — это массив с индексами от 0 до j. Предположим, что значение j равно 3 (для этого примера), а значения в нем приведены ниже. Данные в строках листа сортируются в соответствии с этими ограничениями. например, от строки 2 до строки 1507 = «Значение 1», строки 1508 до строки 3013 = «Значение 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

person user3790349    schedule 30.06.2014    source источник


Ответы (4)


Измените код следующим образом:

For L = 0 To j

    For K= c_bound_h(L) To c_bound_h(L+1)-1
    Next K

Next L
person Tarik    schedule 30.06.2014

Используйте Для L = 1 до J-1....

Потому что c_bound_h(L+1) в противном случае вышел бы за пределы

person Dan Savage    schedule 30.06.2014

Вы объявляете 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
person Community    schedule 30.06.2014

Необходимо предотвратить ненужные циклы, сравнивая 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 " & k
    Next k

Next L

End Sub
person CoveGeek    schedule 30.06.2014