ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 19.06.2025
Просмотров: 1419
Скачиваний: 3
Вторая строка в листинге 2 образует тело процедуры и является единственным оператором, выполняющим «полезную» работу. Тело процедуры
может состоять из одного или многих операторов или не состоять ни из одного оператора. Оператор MsgBox отображает сообщение в диалоговом окне на экране и описывается более подробно далее в следующей части.
Третья строка процедуры HelloExcel – End Sub – завершает процедуру. Эта строка сообщает VBA о том, что это – конец процедуры; VBA прекращает выполнение процедуры при достижении им этой строки.
Задание 5. Выполните процедуру HelloExcel. Для этого:
üвыберите команду Tools/Macros… (Сервис/Макрос) для отображения диалогового окна Macros (Макрос);
üвыберите процедуру HelloExcel в списке Macro Name (Имя макроса);
üщелкните на кнопке Run (Запуск). Когда VBA выполняет процедуру HelloExcel из листинга 2, он отображает диалоговое окно, показанное на рис. 11. Точный заголовок этого диалогового окна зависит от того, в каком host- приложении (Word, Excel и т.д.) вы создали процедуру;
Рис. 11 ü щелкните на кнопке ОК для установки диалогового окна в исходное
состояние и завершения процедуры.
Заметьте, что даже в этой короткой процедуре тело процедуры расположено с отступом для отделения его от объявления и конца процедуры. Следует всегда размещать код с отступом, чтобы его было легче читать. Текстовый редактор VBA содержит свойство, называемое автоматический отступ (auto indenting), позволяющее форматировать исходный код с различными уровнями отступа. Если свойство автоматического отступа включено, то всякий раз, когда вы нажимаете на Enter, чтобы начать новую строку, курсор вставки на новой строке автоматически перемещается в положение, совпадающее с уровнем отступа строки, расположенной выше. Нажмите на Backspace, чтобы вернуться к предыдущему уровню отступа. Для включения и выключения автоматического отступа устанавливайте или отключайте флажок Auto Indent (Автоотступ) на вкладке Editor (Редактор) диалогового окна Options (Параметры).
Независимо от того, пишете ли вы новую процедуру или редактируете записанный макрос, вам потребуется запускать эту процедуру для проверки результатов ваших усилий. Вы уже знаете, как использовать диалоговое окно
32
Macros для запуска макроса или процедуры; вы можете их также запускать непосредственно из модуля во время редактирования. Для этого сделайте следующее:
üубедитесь, что курсор находится в процедуре (в ее теле, в строке объявления или в завершающей строке;
üвыберите команду Run/. VBA выполнит процедуру от начала до конца.
Задание 6. Измените заголовок диалогового окна “Microsoft Excel” на “Моя первая программа” процедуры HelloExcel.
Для этого:
ü добавьте в MsgBox:
MsgBox "Здравствуй, Excel!", , "Моя первая программа"
Оператор MsgBox имеет три аргумента (которые следуют после него); каждый аргумент отделяется от других запятой. Первый аргумент оператора MsgBox такой же, как в листинге 2, и является текстом, который должен быть отображен посредством MsgBox (показанный во всплывающем окне Quick Info как аргумент Prompt). Как только вы ввели запятую, отделяющую первый аргумент от второго, вы, вероятно, заметили, что всплывающее окно Quick Info изменяется: аргумент Buttons в окне Quick Info выделяется полужирным шрифтом, тогда как аргумент Prompt отображается опять обычным шрифтом. В то же время, в модуле появляется раскрывающийся список; этот список содержит все возможные значения для аргумента Buttons. Появляющийся список является результатом свойства Auto Data Tips (подсказка значений данных) Редактора VB. Это свойство работает подобно свойству Auto Quick Info, но отображает списки допустимых значений для аргументов процедуры и других элементов в коде VBA. Второй аргумент оператора MsgBox является необязательным; в данном примере необязательный второй аргумент опущен. Поскольку необязательный аргумент опускается, в списке аргументов имеется один символ пробела. Этот пробел указывает VBA на то, что в этом списке пропущен необязательный аргумент. За символом пробела следует запятая, чтобы отделить его от следующего аргумента в списке. Если вы не введете символ пробела между двумя запятыми, VBA добавляет его. Необязательный второй аргумент в операторе MsgBox – это аргумент Buttons. Он появляется во всплывающем окне Auto Quick Info, заключенный в квадратные скобки для указания того, что это – необязательный аргумент. Аргумент Buttons определяет, сколько и какого типа командные кнопки появляются в диалоговом окне, отображаемом посредством MsgBox. Когда вы опускаете необязательный второй аргумент (как в этом примере), диалоговое окно, которое отображает MsgBox, содержит только одну кнопку – кнопку ОК. Третий аргумент в операторе MsgBox определяет заголовок диалогового окна. Как только вы вводите запятую, отделяющую второй и третий аргументы в списке аргументов оператора MsgBox, всплывающее окно Auto Quick Info указывает, что вы теперь должны ввести значение аргумента для аргумента Title. Подобно
первому аргументу текст для строки заголовка диалогового окна заключается в
33
кавычки (""). VBA всегда воспринимает заключенный в кавычки текст как данные, а не как текст, содержащий программные инструкции. Если вы опустите кавычки для текста сообщения MsgBox или для текста строки заголовка диалогового окна, VBA отобразит сообщение об ошибке. Поскольку третий аргумент является также и последним, никакой запятой после третьего аргумента не требуется.
При написании или редактировании процедуры, вы можете сделать ошибки в операторах. VBA определяет многие из этих ошибок во время написания и
редактирования вами исходного кода и может обнаружить некоторые ошибки при выполнении процедуры.
Ошибки синтаксиса
Синтаксисом (syntax) – называется определенный порядок слов и символов, который образует правильный оператор VBA. Некоторые из наиболее общих ошибок, с которыми вы сталкиваетесь во время написания или редактирования процедур VBA, – это ошибки синтаксиса (syntax errors), например, пропущенные запятые, кавычки, аргументы и так далее.
Всякий раз, когда вы пишете новую строку кода или изменяете существующую, VBA анализирует (parses) строку, как только курсор вставки перемещается из новой или измененной строки. Синтаксический анализ (parsing)
– так называется процесс разбивки оператора VBA на составляющие части и определение того, какие части строки являются ключевыми словами, переменными или данными. После выполнения анализа строки кода VBA компилирует эту строку кода. Компиляция (compiling) в VBA означает составление исходного кода в форме, которую VBA может непосредственно выполнять без необходимости снова анализировать код.
После того как VBA успешно завершит анализ и компиляцию строки кода в процедуре и не будет обнаружено никаких ошибок, выполнится цветовое кодирование различных частей строки (Помните, ключевые слова в Редакторе VB отображаются синим цветом, комментарии – зеленым, а данные или другие операторы отображаются в виде черного текста). Если, однако, VBA обнаруживает ошибку синтаксиса в строке в процессе анализа или компиляции, VBA отображает всю строку красным цветом и выводит на экран диалоговое окно с сообщением об ошибке.
Задание 7. Измените фрагмент кода процедуры HelloExcel, представляющий неправильно написанный оператор MsgBox.
Для этого:
ü измените строку 2 на следующую:
MsgBox "Здравствуй, Excel!", , Моя первая программа.
В этом примере кавычки, необходимые вокруг текста, определяющего заголовок диалогового окна, были случайно пропущены. В результате VBA не может определить, что три слова в последнем аргументе являются данными; вместо этого VBA воспринимает слово Моя как имя переменной. Переменной (variable) называют место в памяти, используемое для сохранения данных.
34
Переменные описываются в следующей части.
Поскольку третий аргумент воспринимается как переменная с именем приветствия, VBA «ожидает» запятую или конец списка аргументов для процедуры MsgBox. Вместо этого VBA находит символ пробела, за которым следует, как это кажется, имя другой переменной. VBA отображает всю строку красным цветом, чтобы указать, что она содержит ошибку, выделяет слово или символ в том месте строки, где, по определению VBA, находится ошибка, и затем отображает диалоговое окно (рис. 12).
Рис. 12
Если вы получаете подобное сообщение об ошибке синтаксиса или компилирования, щелкните на кнопке Справка (Help) для доступа к справочной системе VBA и получения более подробной информации о конкретной встретившейся ошибке синтаксиса. Чтобы удалить диалоговое окно, щелкните на кнопке ОК.
После удаления с экрана диалогового окна с сообщением об ошибке попробуйте устранить ошибку. Вы можете переместить курсор вставки со строки после удаления диалогового окна, но строка остается отображенной красным цветом для указания на то, что в ней содержится ошибка. VBA не анализирует и не компилирует строку, содержащую ошибку синтаксиса снова, пока вы не запустите процедуру или не отредактируете эту строку. VBA анализирует строки в процедуре только тогда, когда вы убираете курсор вставки со строки непосредственно после внесения изменений или когда запускаете процедуру. Если при выполнении процедуры встречается строка с синтаксической ошибкой, выполнение кода прекращается, отображается модуль, содержащий процедуру, в которой имеется ошибка синтаксиса, выделяется конкретная строка в модуле, где обнаружена ошибка и отображается диалоговое окно с сообщением об ошибке.
Диалоговое окно, которое VBA отображает для ошибки синтаксиса, обнаруженной при выполнении процедуры, обычно содержит гораздо меньше деталей о конкретной ошибке, чем диалоговое окно, которое VBA отображает, когда обнаруживает ошибку синтаксиса после того, как вы напишете или измените строку. По этой причине (и для того, чтобы избежать проблем, вызванных неожиданным прерыванием выполнения процедуры) следует всегда стараться исправлять ошибки синтаксиса, когда VBA их обнаруживает впервые. VBA обнаруживает многие ошибки синтаксиса, информируя о пропущенных запятых, кавычках и так далее. Однако не всякое сообщение об ошибке такое понятное, как хотелось бы.
35
Ошибки времени исполнения
Вы можете создать синтаксически правильный оператор VBA, который все же не выполняется правильно. Ошибки, которые выявляются только при фактическом выполнении процедуры, называются ошибками времени исполнения (runtime errors) или runtime ошибками. Существуют различные типы таких ошибок. Они обычно вызваны пропуском аргументов процедуры, аргументами неверного типа данных, пропуском ключевых слов, попытками доступа к несуществующим драйверам диска и папкам каталога или ошибками в логике.
Задание 8. Измените фрагмент кода процедуры HelloExcel, представляющий неправильно написанный оператор MsgBox.
Для этого:
ü измените строку 2 на следующую:
MsgBox "Здравствуй, Excel!" , "Моя первая программа".
В этом примере VBA не находит ничего неверного в синтаксисе оператора MsgBox: текст данных правильно заключен в кавычки и список аргументов правильно разделен запятыми. Поскольку все аргументы, кроме первого для MsgBox являются необязательными, VBA принимает два аргумента для MsgBox в качестве правильного синтаксиса. Однако когда VBA пытается выполнить оператор в этой строке, он отображает диалоговое окно с сообщением об ошибке
(рис. 13).
Рис. 13 Это диалоговое окно информирует о том, что возникла ошибка при
выполнении процедуры, и отображает сообщение, описывающее эту ошибку. В данном случае ошибкой является ошибка несоответствия типа (type mismatch). Если вы еще раз посмотрите на вышеприведенный оператор MsgBox, то можете заметить, что отсутствует запятая, отмечающая место для необязательного
MsgBox-аргумента Buttons.
Когда VBA анализирует этот оператор, заключенный в кавычки текст «Моя первая программа» компилируется как второй аргумент MsgBox, а не как третий аргумент из-за пропущенной запятой. Поскольку аргумент командной кнопки должен быть числом, а не текстом, VBA сообщает о том, что тип данных, передаваемый процедуре MsgBox, не совпадает с типом данных, ожидаемых для этого аргумента. Более подробно о типах данных рассказывается в следующей части.
36