- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
VBA для чайников - Стив Каммингс
Шрифт:
Интервал:
Закладка:
Свое название эта команда получила из-за того, что при ее использовании происходит вход в любую из вызываемых в программе процедур: если следующим оператором оказывается вызов процедуры типа Sub или Function, то применение команды Step Into приведет к открытию вызванной процедуры в окне редактирования, чтобы вы могли пройти эту процедуру по шагам и увидеть все, что происходит.
Команда Step Into доступна не только в режиме паузы. Если нужно выполнить программу по шагам с самого начала, запустите ее с помощью команды
Step Into. В таком случае команда Step Into начинает выполнение с той процедуры, в которой оказывается текстовый курсор, причем процедура всегда выполняется с самой первой строки.
Команда Step Over (Обойти процедуру) вызывается клавишами <Shift+F8> и работает подобно команде Step Into, но со следующими двумя отличиями:
* при вызове процедуры команда Step Over не приводит к пошаговому выполнению вызываемой процедуры;
* с помощью команды Step Over нельзя начать выполнение программы в режиме паузы.
Если оператор, который должен выполняться следующим, вызывает некоторую процедуру, команда Step Over выполнит эту процедуру без перерывов, целиком, сделав сразу все имеющиеся в процедуре глупости и не дав вам проверить промежуточные результаты. Обход процедур очень экономит время, когда вы уверены, что вызываемая процедура работает так, как нужно.
Команда Step Out (Выйти из процедуры) вызывается клавишами <Ctrl+Shift+F8> и прекрасно дополняет команду Step Over. После входа в процедуру в режиме ее пошагового выполнения вы можете решить, что все в порядке или что ошибка найдена и исправлена.
Или, намереваясь щелкнуть на кнопке Step Over, вы можете случайно щелкнуть на кнопке Step Into лично у меня такое происходит регулярно).
В любом из таких случаев нет необходимости проходить по шагам оставшуюся часть процедуры. Чтобы пройти остаток с полной скоростью, используйте команду Step Out.
VBA быстро доставит вас в ту процедуру, из которой вы пришли, подсветив оператор, следующий за оператором с вызовом процедуры.
Основные приемы отладки
В режиме паузы поток выполнения программы не рассматривается как нечто "замороженное" только потому, что программа выполняется. VBA оказывается достаточно сообразительным, чтобы позволить вносить коррективы прямо по ходу дела. В частности, в режиме паузы можно редактировать программный код и изменять порядок, в котором должны выполняться операторы.
Добавление и редактирование программного кода в режиме паузы
Все возможности окна редактирования программного кода остаются в силе и в режиме паузы. Вы имеете возможность печатать новые операторы и редактировать или удалять уже имеющиеся. И главное, в большинстве своем эти изменения сработают незамедлительно, став частью выполняемой программы. Так, вы можете объявлять переменные, чтобы сразу же использовать их в вычислениях в комбинации с уже существующими переменными программы.
Но есть также изменения (например, изменение типа переменной в ее объявлении), которые заставят VBA прекратить выполнение программы.
Назначение другого следующего оператора
Представьте, что вы, двигаясь сквозь свою программу в пошаговом режиме, вдруг обнаруживаете, что в следующем операторе содержится большая ошибка. Вместо того чтобы выполнить этот оператор и тем самым ввести свою программу в "штопор", вы можете обойти этот оператор и не выполнять его вообще, пока когда-нибудь в будущем не исправите ошибку.
Редактор Visual Basic почти всегда позволяет с помощью клавиш либо мыши назначить другой оператор для выполнения следующим. При этом вы можете перемещаться в программном коде как вперед, так и назад. В дополнение к возможности пропустить неправильный программный код, вы можете повторять выполнение некоторого фрагмента программного кода до тех пор, пока не поймете, как он работает.
Только знайте, что переменные при этом будут хранить те значения, которые они имели перед началом внесения вами изменений. Эти значения могут сильно отличаться от тех, которые переменные имели бы в соответствующей точке при естественном ходе выполнения программы. Если необходимо, назначьте переменным значения по своему усмотрению с помощью окон Immediate, Watches или Locals, которые будут обсуждаться в этой главе ниже.
Вот как назначить другой следующий оператор.
* С помощью клавиатуры переместите точку ввода в строку с нужным вам оператором, ( нажмите <Ctrl+F9> или выберите Debug=Set Next Statement из меню.
* С помощью мыши перетащите желтую стрелку на полях в окне редактирования программного кода к строке с новым следующим оператором (рис. 9.5).
Еще один способ пропустить программный код
Есть еще один способ пропустить часть программного кода, на который падает подозрение в содержании ошибки. Этот метод годится и для режима паузы, и для обычного режима редактирования перед запуском программы на выполнение. Как вы уже знаете, можно напечатать апострофы в начале каждой строки того фрагмента программного кода, который нужно пропустить. Тем самым строки программного кода превратятся в строки комментария. Единственный недостаток этого способа- на такое "комментирование" с последующим "раскомментированием" нужно время. Правда, можно "комментировать" сразу целый блок с помощью одного щелчка на кнопке Comment Block (Превратить блок в комментарий) панели инструментов Edit (Правка) (см. главу 6).
Но часто для пропуска фрагмента программного кода самым удобным оказывается назначение метки и временное использование ссылающегося на нее оператора GoTo. Например, при выполнении следующего фрагмента программного кода VBA пропустит все операторы между GoTo ПослеПропуска и оператором, следующим за меткой ПослеПропуска:. - 16
GoTo ПослеПропуска
A = В + С
D = А + Е / F
G = B + D
ПослеПропуска:
: MsgBox '" Format(Now, "dddd"
Когда пропущенный фрагмент понадобится снова, просто удалите строку с оператором GoTo или превратите ее в комментарий. :
Рис. 9.5. Назначение другого оператора, предназначенного для выполнения следующим, дает возможность повторять выполнение фрагментов программы, чтобы разобраться в них подсказки
Замечательная возможность автоматической подсказки значений в VBA позволяет видеть текущее значение любой переменной в программе. Находясь в режиме паузы, задержите на секунду указатель мыши на имени нужной вам переменной, и на экране появится окно подсказки - небольшой прямоугольник с именем и текущим значением переменной в нем (рис. 9.6).
Если же прямоугольники с подсказками значений на экране не появляются, проверьте, чтобы был установлен флажок Auto Data Tips (Автоматическая подсказка значений) на вкладке Editor (Редактор) диалогового окна Options (Параметры).
Редактор Visual Basic позволяет также увидеть тип и область видимости переменной, хотя соответствующая информация и не появляется автоматически. Поместите курсор между буквами или около имени переменной и нажмите <Ctrl+I>, и на экране появится окно подсказки Quick Info (Краткая справка) с этой информацией. Для этого не обязательно находиться в режиме паузы, что особенно удобно при работе с большими программами, когда объявления переменных оказываются где-то далеко в самом начале программы. Пример того, что вы можете увидеть в прямоугольнике краткой справки, показан на рис. 9.7.
Рис. 9.7 Отображение подсказки Quick Info для переменной
Немедленное вознаграждение в окне Immediate
Чтобы открыть окно Immediate (Окно немедленного выполнения команд, рис. 9.8), нажмите <Ctrl+G> или выберите Viewolmmediate Window из меню. Окно Immediate предоставляет следующие возможности:
* видеть результаты вычислений и значения переменных, вывод которых можно направить в это окно с помощью метода Debug.Print;
* выполнять отдельные операторы сами по себе, не помещая их в процедуры: чтобы выполнить оператор в окне Immediate, просто напечатайте его там и нажмите <Enter>.
"Зачем это нужно?" - спросите вы. Отвечаю.
* Окно Immediate можно использовать просто как калькулятор. Напечатайте в нем выражение типа
Print (27 * 398) + 1414
затем нажмите <Enter>, и вы немедленно получите результат (см. рис. 14.8). При работе в окне Immediate вам нет необходимости указывать объект Debug.
* Можно направить в окно Immediate вывод промежуточных значений переменных и выражений при выполнении программы, разместив в подходящих строках программы операторы, вызывающие метод Debug.Print. По завершении выполнения программы вы получите возможность просмотреть сразу все выведенные значения (рис. 9.9), чтобы выяснить, все ли они правильны, а не рассматривать их по отдельности в разное время при пошаговом выполнении программы.
Рис. 9.8. Окно Immediate в действии
* В режиме паузы в окне Immediate можно отобразить значение любой переменной или свойства объекта с помощью оператора Print или изменить значение с помощью стандартного оператора присваивания. Можно также стандартным способом вызывать процедуры. При этом вы должны понимать, что в режиме паузы выполняемые в окне Immediate операторы могут иметь доступ только к переменным, объектам и процедурам, находящимся в области видимости той процедуры, которая выполняется в данный момент. Другими словами, результат выполнения оператора в окне Immediate будет тем же, что и результат печатания этого оператора в выполняемой в данный момент процедуре и работы его в ней.

