Цикл For-Next не останавливается в Access VBA - PullRequest
0 голосов
/ 02 июля 2019

Кажется, это просто сумасшедший вопрос, но я не могу понять, что я сделал неправильно.Работа в Access VBA для обхода массива, но цикл FOR не останавливается, и я получаю ошибку «Subscript out of range».

    compStr = "[" & uniqueIDs(0) & "]=" & rs(uniqueIDs(0))
    bnd = UBound(uniqueIDs)
    For i = 1 To bnd
        compStr = compStr & " and [" & uniqueIDs(i) & "]=" & rs(uniqueIDs(i))
    Next i

В этом примере я использую цикл для сборкиcompStr и bnd хранит размер массива.uniqueID содержит 2 записи (0-1), и я подтвердил, что значения bnd и UBound (uniqueID) = 1.Однако оператор FOR продолжается до i = 2, и, конечно, я получаю ошибку, когда он выполняет uniqueIDs (2) в 4-й строке.Что мне не хватает?(Я вставил изображения окна отладки ниже)

enter image description here

1 Ответ

3 голосов
/ 03 июля 2019

Я сделал тест, но он успешно прошел, см. Ниже реализацию:

enter image description here

Что касается вышеупомянутых комментариев к типам данных: я понимаю, почему люди используютВарианты в Access: это потому, что часто значения таблиц присваиваются переменным, и только Variant может получить значение NULL.Тем не менее, в вашем случае что-то заставило строковые значения быть Strings, а не Variants - если бы я использовал закомментированную строку, это привело бы к Variant / Variant (от 0 до 1), поэтому я использовал типизированный фиктивный массив - я не знаюкак иначе получить Variant / String (от 0 до 1).
Тем не менее, ошибки не было.Вы скомпилировали свой код с помощью Debug -> Compile?Если нет, не могли бы вы сделать это и повторить попытку?Иногда это необходимо, в противном случае некоторые добавленные / удаленные сегменты кода просто не выполняются, а предыдущая скомпилированная версия кода (которая хранится в Access) создает полный беспорядок.
Если это все еще не работает, я думаю, что выследует добавить оставшуюся часть кода, как просили другие в комментариях, чтобы увидеть, как переменным присваиваются значения, и версию Access, которую вы используете.

...