#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