Длинная переменная VBA продолжает сбрасываться во время цикла Do While?

#vba #loops #excel-2010 #do-while #long-integer

Вопрос:

Я пишу некоторый код в Excel для сканирования строки на наличие определенного значения, а затем получаю адрес ячейки этого значения.

 lngCol = 0  search_start = "D1"  Do While current_week lt;gt; week_one  lgnCol = lngCol   1  current_week = Range(search_start).Offset(0, lngCol) Loop  wk_one_col = current_week.Address Debug.Print wk_one_col  

Код в основном работает, и я не получаю никаких ошибок, но lngCol переменная не увеличивается, как должно быть.

В цикле lngCol всегда 1 после первого цикла и lngCol 1 добавляет 1 к исходному значению переменной, которое равно нулю.

Чего я не понимаю, так это того, что каждый цикл должен увеличивать его. Итак, первый цикл, он добавляет 1 к нулю, устанавливая lngCol значение 1. Второй цикл, он добавляет еще 1 к 1, делая его 2.

У меня есть еще одна функция, на которой основана эта идея, и она работает так, как ожидалось. В каждом цикле lngCol переменная увеличивается на 1.

Я знаю, я знаю, что мне нужно, чтобы сама переменная находилась вне области действия цикла, иначе она будет каждый раз сбрасываться до нуля. Где я здесь ошибаюсь?

Комментарии:

1. Положите Option Explicit сверху, и правда откроется.

2. Видите ли вы, что цикл не завершается после первой итерации, а переменная shill не увеличивается? Что week_one должно быть? Была ли она инициализирована? Запуск кода шаг за шагом, используя F8 вы видите, что код зацикливается, а переменная все еще не получает приращения? У меня есть некоторые сомнения…

3. Ваши сомнения следует разрешить, немного поразмыслив над lgnCol = lngCol линией @FaneDuru.

4. Я согласен с @FaneDuru в том, что ваш код не зацикливается. Проблема заключается в значениях current_week и week_one. Похоже, вы рассматриваете current_week как число в одной точке и диапазон в другой. Лучше всегда использовать параметр Явно и всегда быть ясным при обращении к свойствам диапазонов.

5. И вот, друзья, почему у меня не может быть хороших вещей. Спасибо @GSerg за то, что мягко указали на это 🙂

Ответ №1:

Спасибо всем, кто прокомментировал. Проблема здесь заключалась в том, что я неправильно написал имя переменной в увеличивающейся строке:

lgnCol = lngCol 1

Должно быть:

lngCol = lngCol 1