Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 семестр / Программирование на VBA

.pdf
Скачиваний:
209
Добавлен:
09.04.2015
Размер:
1.24 Mб
Скачать

включить ключевое слово Sub в начале процедуры и ключевые слова End Sub в конце.

Задание 4. Напишите процедуру, отображающую на экране в новом окне сообщение Привет, Excel!”.

Для этого:

üоткройте любую рабочую книгу Excel или создайте новую рабочую

книгу;

üнажмите Alt+F11 для активизации Редактора VB;

üв Project Explorer выделите рабочую книгу, в которой хотите сохранить эту программу;

üвыберите Inser/Module (Вставка/Модуль), чтобы добавить новый модуль

квашему проекту. Редактор VB добавляет новый модуль и открывает для него

Code Window;

üпереименуйте новый модуль, дав ему имя FirstProgram;

üубедитесь, что курсор вставки находится в начале пустой строки в Code Window, и введите текст, показанный в листинге 2, нажимая на Enter в конце каждой строки для начала новой строки.

Листинг 2 Процедура HelloExcel

1Sub HelloExcel()

2MsgBox "Здравствуй, Excel!"

3End Sub

Редактор VB содержит несколько возможностей, помогающих в написании процедур. Во-первых, как только вы нажмете на Enter после ввода ключевого слова Sub и имени процедуры, Редактор VB автоматически добавляет ключевые слова End Sub. Таким образом, вам не приходится беспокоиться о том, что вы можете случайно забыть об этом важном элементе процедуры. Во-вторых, Редактор VB включает возможность, известную как Auto Quick Info (Краткие сведения). Как только вы вводите MsgBox и нажимаете на клавишу пробела (строка 2 листинга 2), появляется всплывающее окно, показывая полный список аргументов для встроенной процедуры VBA или функции, которую вы только что ввели (MsgBox в данном случае). Аргумент, значение которого, как ожидается, вы теперь должны ввести, выделен полужирным шрифтом во всплывающем окне Auto Quick Info. Всплывающее окно Auto Quick Info закрывается, если вы нажимаете на Enter для начала новой строки в Code Window или используете

клавиши со стрелками или мышь для перемещения курсора вставки с текущей строки на другую. Вы можете также закрыть окно Auto Quick Info, нажимая на клавишу Esc. Если вас интересует возможность Auto Quick Info, вы можете включать и выключать ее с помощью команды Tools/Options (Сервис/Параметры) в Редакторе VB.

Каждое объявление процедуры должно начинаться с ключевого слова Sub, за которым следует пробел и затем имя процедуры. В листинге 2 именем процедуры является HelloExcel. Финальная часть объявления процедуры это пара пустых круглых скобок. Эти скобки обязательны.

31

Вторая строка в листинге 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

Диалоговое окно для сообщений об ошибках времени исполнения содержит несколько командных кнопок (рис. 12):

üContinue (Продолжить) – выбирайте эту командную кнопку для продолжения процедуры. Некоторые ошибки времени исполнения позволяют продолжать выполнение процедуры; однако для большинства таких ошибок эта кнопка отключена;

üEnd (Завершить) – выбирайте эту кнопку, чтобы закончить процедуру;

üDebug (Отладка) – выбирайте эту кнопку для перехода в режим прерывания и используйте возможности отладки Редактора VB для отслеживания

ирешения любой проблемы, вызванной ошибкой времени исполнения;

üHelp (Справка) – эта команда предоставляет доступ к справочной системе VBA и отображает текст подсказки, описывающий конкретную ошибку времени исполнения, которая возникла. Используйте эту кнопку, чтобы получить больше информации, если вам не понятно, что означает данная ошибка времени исполнения.

Если вы не понимаете, почему использование определенного ключевого слова VBA или процедуры приводит к ошибке времени исполнения, вы можете получить справку по этому конкретному ключевому слову или процедуре, поместив курсор на этом слове и нажав на клавишу F1. VBA отображает раздел справочной системы для этого ключевого слова или процедуры, если таковой имеется.

Печать исходного кода

В некоторый момент времени вам может понадобиться распечатать какой- либо исходный код VBA. Может появиться необходимость печати в целях архивирования или документирования, демонстрации или изучения.

При печати исходного кода VBA можно печатать все модули в проекте или только модуль текущего выбора. Нельзя выделять для печати отдельные процедуры.

Чтобы напечатать исходный код, выполняйте следующие шаги:

üв Project Explorer выделите модуль или проект, который вам необходимо печатать. Если вы хотите печатать только выделенный текст в модуле, выведите модуль на экран и выделите текст, который необходимо печатать;

üвыберите команду File/Print (Файл/Печать). Редактор VB отображает диалоговое окно Print (рис. 14);

üв группе элементов управления Range (Диапазон печати) укажите, будет ли печататься текст текущего выбора, выделенный модуль или весь проект;

üв группе элементов управления Print What (Печатать) должен быть установлен флажок Code (Программу) (чтобы печатать исходный код); если ваш проект содержит формы, установите флажок Form Image (Рисунок формы) для печати рисунка формы;

üустановите любые другие параметры печати, какие необходимо, так же, как вы это делаете в любом приложении Microsoft Office;

37

Рис. 14 ü щелкните на кнопке ОК, чтобы напечатать исходный код.

Когда вы печатаете проект или модуль, вы не можете предварительно просматривать печатаемый модуль. Отпечатанный листинг из модуля всегда форматируется одним и тем же образом, за исключением ориентации страниц, которую вы можете регулировать, щелкнув на кнопке Setup (Настройка) в диалоговом окне Print.

Контрольные вопросы

1.Что такое модуль VBA?

2.Как найти модуль, содержащий необходимый макрос?

3.Для чего используется Object Browser?

4.Что такое ключевое слово VBA?

5.Какие необходимые элементы содержит процедура?

6.Что такое объявление процедуры?

7.Что такое тело процедуры и где оно расположено?

8.Зачем делать отступы в текстах программ?

9.Что такое аргумент?

10.Что такое символ продолжения строки?

11.Что такое синтаксическая ошибка и ошибка времени выполнения?

Часть 3. ТИПЫ ДАННЫХ, ПЕРЕМЕННЫЕ И КОНСТАНТЫ. ВЫРАЖЕНИЯ В VISUAL BASIC. ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ VISUAL BASIC

Из этой части вы узнаете о типах данных, которыми можно управлять VBA, как в VBA хранятся временные данные, как объединять переменные и константы для создания новых значений, научитесь включать встроенные функции в выражения.

Лабораторная работа № 3. Обзор типов данных VB. Переменные и константы. Совместимость типов данных. Оператор присваивания. Арифметические и логические операторы. Встроенные функции

Цель занятия: Знать типы данных. Уметь создавать переменные. Уметь задавать типы данных переменным. Уметь создавать именованные константы. Знать область действия

38

переменных и констант. Знать преобразование типов. Уметь использовать оператор присваивания. Знать арифметические и логические операции. Уметь использовать конкатенацию строк. Уметь использовать встроенные функции VBA.

Материалы к занятию: MS Excel 2003.

Обзор типов данных Visual Basic (VB)

Перед изучением переменных следует понять, как VBA сохраняет различные виды информации. VBA, как и большинство других систем программирования, разделяет обрабатываемые данные на числа, даты, текст и другие типы. Тип данных (data type) – это термин, относящийся к определенным видам данных, которые VBA сохраняет и которыми может манипулировать.

В табл. 9 обобщены типы данных VBA, показано, какой объем памяти занимает каждый тип, кратко описаны типы данных и дан диапазон значений, которые данный тип может сохранять.

Таблица 9 Типы данных VBA

Название типа

Размер в

Описание и диапазон значения

 

байтах

 

Byte

1

Целые положительные числа от 0 до 255

Integer

2

Целые числа от -32768 до 32767

Long

4

Длинные целые числа от -2147483648 до

 

 

2147483647

Single

4

Вещественные числа обычной точности с

 

 

плавающей точкой.

 

 

Отрицательные числа:

 

 

от -3.402823Е38 до -1.401298Е-45.

 

 

Положительные числа:

 

 

от 1.401298Е-45 до 3.402823Е38

Double

8

Вещественные числа двойной точности с

 

 

плавающей точкой.

 

 

Отрицательные числа:

 

 

от -1.79769313486232Е308 до

 

 

-4.94065645841247Е-324.

 

 

Положительные числа:

 

 

от 4.94065645841247Е-324 до

 

 

1.79769313486232Е308

Currency

8

Числа, имеющие до 15 цифр до десятичной

 

 

точки и 4 цифры после нее (денежные единицы).

 

 

От -922337203685477.5808 до

 

 

922337203685477.5807

Boolean

2

Для хранения логических значений; может

 

 

содержать только значения True (Истина) или

 

 

False (Ложно)

39

Название типа

Размер в

 

Описание и диапазон значения

 

 

байтах

 

 

 

 

 

 

Date

8

 

Для хранения комбинации информации о дате и

 

 

 

времени. Диапазон дат может быть от 1 января

 

 

 

100 года до 31 декабря 9999 года. Диапазон

 

 

 

времени от 00:00:00 до 23:59:59

 

 

String

10 байт

+

Используется для

хранения

текста.

Может

(строка

длина строки

содержать от 0 символов до (приблизительно) 2

переменной

 

 

миллиардов символов

 

 

длины)

 

 

 

 

 

 

 

String

Длина

 

Используется для хранения текста. Может

(строка

строки (один

содержать от одного до (приблизительно) 65400

фиксированной

байт на один

символов

 

 

 

 

длины)

символ)

 

 

 

 

 

 

Variant

16 байт +

 

Тип Variant может хранить любой другой тип

 

1 байт/символ

данных.

Диапазон

для данных типа

Variant

 

 

 

зависит от фактически сохраняемых данных. В

 

 

 

случае

текста

диапазон

соответствует

 

 

 

строковому типу; в случае чисел диапазон

 

 

 

такой, как у типа Double

 

 

Object

4

 

Используется для доступа к любому объекту,

 

 

 

распознаваемому VBA. Сохраняет адрес объекта

 

 

 

в памяти

 

 

 

 

В табл. 9 вы встретились с представлением данных, называемым

экспоненциальным представлением (scientific notation), которое используется для отображения на внешних устройствах (монитор, принтер и т.д.) очень больших и очень малых чисел в компактном формате. В экспоненциальном представлении

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

VBA имеет шесть различных численных типов данных: Byte, Integer, Long, Single, Double и Currency. Численные типы данных используются для хранения (и манипулирования) чисел в различных форматах, в зависимости от конкретного типа.

Обычно VBA-программа (как и любые другие программы) «принимает» решения, проверяя, являются ли истинными различные условия. Для упрощения

тестирования условий и обеспечения сохранения результатов такого тестирования в VBA имеется логический тип данных. Логические значения True и False называют булевыми (Boolean) значениями. Их название связано с именем математика, разработавшего систему математической логики. Логический тип данных VBA называют также типом Boolean. Boolean-тип VBA требует двух байтов памяти и может иметь одно из двух значений: True или False. Если вы отображаете тип Boolean на экране, VBA автоматически преобразует его в строку, содержащую либо слово True, либо False. Булевы значения получают как

40