Отладка макроса VBA - Советы по Excel

Как отладить макрос Excel VBA, который не работает. В Excel VBA есть удивительные инструменты, которые позволяют вам видеть текущее значение, хранящееся в переменных, при пошаговом выполнении кода по одной строке за раз. Если у вас есть макрос, который не работает,

Смотреть видео

  • У вас есть макрос Excel VBA, который не работает
  • VBA имеет потрясающие инструменты отладки
  • Вместо того, чтобы запускать свой код, вы можете выполнить код с помощью F8
  • Строка желтого цвета - это строка, которую он собирается запустить.
  • Наведите указатель мыши на любую переменную, чтобы увидеть значение этой переменной.
  • Переключайтесь назад и вперед в Excel, чтобы увидеть, что происходит

Стенограмма видео

Изучите Excel из подкаста, эпизод 2096: Отладка макроса VBA

Привет, добро пожаловать обратно в netcast, я Билл Джелен. Сегодняшний вопрос: у кого-то был код, который я разместил в старом видео на YouTube, и они опубликовали комментарий, в котором говорилось: «А, это не работает. Он не сохраняет дубликат счета, но и не вызывает ошибку ». Я не знаю, что не так с кодом. Хорошо, знаете, есть отличные инструменты, которые доступны, когда у вас VBA Macro не работает. Итак, у нас есть кнопка, которая должна запускать какой-то код. Я собираюсь назначить макрос, он называется SaveInvoice. Я нажимаю Edit, и мы переходим к VBA. И обычно, когда мы нажимаем эту кнопку, он просто запускает этот код. БАМ! Как будто все произошло очень быстро, но ты не можешь смотреть, что происходит.

Итак, в инструментах отладки одна из моих любимых вещей - это отладка «Шаг с заходом», где вы увидите сочетание клавиш F8, и это позволяет нам запускать код по одной строке за раз. Итак, я нажал там F8, и это - желтая строка - это строка, которую нужно выполнить. Итак, если я нажму F8, он перескочит между этими двумя объявлениями, и теперь мы собираемся выполнить ActiveSheet.Copy. Итак, что здесь действительно красиво, вы знаете, особенно если у вас большой монитор, что окно подкаста слишком маленькое, но что вы можете сделать, так это наблюдать за запуском макроса. Итак, сейчас нужно заняться ActiveSheet.Copy. Прямо сейчас я нахожусь в рабочей тетради под названием «Подкаст 2096». Вот таблица под названием «Счет-фактура», и когда я нажму F8, вы увидите, что я сейчас нахожусь в новой книге под названием «Книга2», и у нас есть только счет-фактура.

А теперь мы собираемся назначить эту большую, длинную вещь на New FN. Нажмите F8. Хорошо, сейчас не похоже, что здесь что-то произошло, потому что здесь ничего не произошло. Но вот что замечательно: теперь я назначил что-то этой переменной под названием New FN, и если я возьму мышь и наведу курсор на New FN, появится небольшая подсказка, которая покажет мне, что хранится в New FN. Итак, он сохраняет имя файла, это папка, в которую он будет помещен. Он называется Invoice1234, потому что он взял значение из F4, а затем добавил PDF.

Хорошо, сейчас одна из самых неприятных вещей в Excel заключается в том, что если ваша память начинает истощаться, эта подсказка не появляется. Вы зависнете там и ничего не произойдет. Иногда вам нужно щелкнуть мышью, чтобы сделать это здесь, а иногда он просто не появляется вообще. Когда он вообще не появится, мы можем сделать Ctrl + G. Ctrl + G - это непосредственное окно, и тогда мы будем использовать? это ярлык для Debug.Print, NewFN. Другими словами, расскажите мне, что находится в New FN, и он сразу же покажет вам, что находится в New FN.

Хорошо, теперь мы собираемся запустить эту строку кода, которая создаст PDF-файл. Хорошо, я нажму F8. Хорошо, и на данный момент у нас должен быть новый PDF-файл с 1234, и если я пойду в папку, наверняка, Inv1234 11 мая в 6:25 только что был создан. Классно, правда?

Хорошо, теперь мы подходим к тому моменту, когда у нас возникла проблема. Хорошо, поэтому мы нажимаем здесь F8, и он отображается как Duplicate Copy. Хорошо, это сработало. А потом F8, и мы увидим, что в New FN. Хорошо, у него есть DupInv1234.pdf, и вы даже можете вернуться сюда и просто щелкнуть после Print NewFN, и тогда вы увидите, что мы изменили имя файла, хорошо. Итак, все круто. Затем мы нажимаем F8, чтобы запустить Создание PDF. Потрясающие! Все выглядит отлично, правда?

Так что вернитесь к нашим файлам подкастов. Хорошо, но вместо того, чтобы иметь что-то под названием DupInv1234, я просто не знаю, как что-то под названием Book2. Хорошо, он был создан минуту назад. Это должно быть одно, но, черт возьми! Кажется, неправильное название. Хорошо, поэтому мы вернемся к VBA, и я знаю, что я только что присвоил правильное значение New FN вот так, хорошо. И давайте посмотрим, как мы его сохраняем. Мы сохраняем его как NewFN1, который пуст; и поскольку он пуст, это означает, что он принимает имя файла, которое в данном случае - Book2, поскольку я сделал его копию. И поменял - Ой, смотрите! Итак, здесь я присвоил имя NewFN, а затем сохранил этот NewFN1, и теперь, поскольку я отлаживаю и зависаю, наведение - это величайшая вещь на свете. Надеюсь, я смогу разобраться в том, что происходит.Так что я возвращаюсь и меняю NewFN1. А теперь вот что замечательно. Хорошо, значит, эта строка уже пропущена в макросе, но я могу перетащить ее обратно и сказать, хорошо, давайте снова запустим это F8. А теперь давайте создадим PDF. Хорошо, а там он появляется с правильным именем и все круто.

Хорошо, теперь, когда я знаю, что все готово, все отлично. Отсюда все будет работать. Я просто нажимаю «Выполнить», и код выполняется до конца. Хорошо, иногда у вас будет длинный макрос с сотнями работающих строк кода, а затем одна конкретная часть, которая не работает, хорошо? Итак, здесь были упомянуты еще несколько инструментов. Если вам нужно перепрыгнуть через целую кучу кода и выполнить все до этой точки, что ж, один из способов сделать это - щелкнуть здесь и создать точку останова. Хорошо, теперь, когда я запустил это, он запустит все до этого момента. Я могу просто нажать «Выполнить», и он остановится, или, если вы даже не хотите устанавливать точку останова, мы просто щелкнем здесь и скажем «Отладка», «Выполнить до курсора». Бежать к курсору.Теперь я знаю, что это вызовет проблему, потому что код для изменения этого номера счета-фактуры я еще не подключил. Я просто введу новый номер счета и сейчас нахожусь на этой строчке. Отладка, запуск к курсору, который является Ctrl + F8. Хорошо, теперь он запустил все до этого момента, и что у нас должно получиться, так это то, что мы должны увидеть, что он только что создал Inv1235, хорошо. А теперь о … мы на этой строчке кода. Я могу просто нажать F8 для запуска одной строки или просто выполнить оставшуюся часть пути. А есть наш DupInv1235, хорошо? Итак, инструменты отладки здесь, в VBA, великолепны. Давайте запустим код по одной строке за раз, расположим экран так, чтобы мы могли видеть как выполняемый код, так и результаты кода слева. И вы знаете, надеюсь, вы сможете понять, что не так с кодом.

Хорошо, итоги эпизода: у вас есть макрос Excel VBA, который не работает. У него потрясающие инструменты для отладки. Вместо того, чтобы запускать свой код, вы можете выполнять его пошагово, используя F8. Желтая линия - это линия, которая будет запущена. Вы можете навести указатель мыши на переменную, чтобы увидеть значение этой переменной, переключаться назад и вперед в Excel, чтобы увидеть, что происходит.

Что ж, я хочу поблагодарить вас за то, что заглянули. Увидимся в следующий раз на другой сетевой трансляции от.

Скачать файл

Загрузите образец файла здесь: Podcast2096.xlsm

Интересные статьи...