Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Макросы.doc
Скачиваний:
26
Добавлен:
21.11.2018
Размер:
16.91 Mб
Скачать

Вопросы и ответы

Вопрос. Где надо определить переменную, чтобы можно было бы воспользоваться ею не только в текущей процедуре?

Ответ. Такую глобальную переменную надо объявить в области общих объявлений модуля. Как объявить - зависит от расположения ваших процедур. Если все процедуры находятся в одном модуле, то можно использовать оператор Dim. Если процедуры локализованы в нескольких модулях, следует воспользоваться оператором Public.

Вопрос. Модули хранятся отдельно от рабочих книг?

Ответ. Нет, модули являются частью рабочих книг. При сохранении рабочих книг сохраняются все изменения, сделанные в модуле.

Вопрос. Почему нельзя объявить все переменные как Variant?

Ответ. Можно, но следует помнить, что переменные этого типа потребляют много системных ресурсов, кроме того, неправильное применение этого типа данных может негативно сказаться на производительности вашего приложения.

Практикум

С помощью тестов и упражнений вы проверите, насколько хорошо усвоили изложенный материал. Ответы на вопросы смотрите в Приложении.

Тесты

  1. Назовите три уровня видимости переменных.

  2. Переменную какого типа необходимо использовать для хранения целых чисел из диапазона от 0 до 100?

  3. Какое максимальное количество символов можно использовать при задании имен процедур, переменных и констант?

  4. Истинно или ложно следующее утверждение: имя процедуры может начинаться с числа?

  5. Где объявляются глобальные переменные?

  6. Истинно или ложно следующее утверждение: константы можно определить только в процедуре?

  7. Какую функциональную клавишу следует нажать для выполнения процедуры в редакторе Visual Basic?

Упражнение

Создайте новую процедуру с именем ПеремИКонст. Создайте переменную с именем sTest типа String. Создайте константу с именем iNumber типа Integer и положите ее равной 2. Установите значение переменной sTest как “Это простой тест”. Добавьте в процедуру следующие две строчки кода, чтобы вывести на экран значения переменной sTest и константы iNumber:

MsgBox “Значение переменной sTest: “ & sTest

MsgBox “Значение константы iNumber: “ & iNumber

Выполните процедуру.

5-й час. Ввод данных

В предыдущих часах в примерах, иллюстрирующих различные темы, несколько раз использовались операторы MsgBox и InputBox. В этом часе мы подробно изучим эти операторы и методы их применения в кодах VBA. В 1-м часе "Знакомство с Visual Basic for Applications" обсуждались ограничения, присущие записанным макросам. Одно из таких ограничений - невозможность ввести какую-либо информацию во время выполнения макроса. В этом часе мы покажем, как организовать ввод информации при выполнении приложения.

В этом часе будут рассмотрены следующие вопросы.

  • Использование функции MsgBox.

  • Использование функции InputBox.

  • Применение метода InputBox.

  • Именование аргументов.

  • Использование объединения текстовых строк.

Функция MsgBox

Посмотрите на рис. 5.1, на котором показано, что произойдет, если вы попытаетесь закрыть рабочую книгу без ее сохранения.

Вы можете подумать, что создание такого окна сообщения требует многих часов программирования. Заблуждаетесь! Такое окно можно создать с помощью всего одной строчки кода VBA:

MsgBox "Сохранить изменения в ' “ & ThisWorkbook.Name & “ '? “, _

 vbYesNoCancel + vbExclamation

Отметим, что оператор MsgBox записан здесь в две строки, хотя в окне кода редактора Visual Basic он может располагаться в одну строку. В VBA символами продолжения строки служит пробел с последующим символом подчеркивания.

Рис. 5.1. Одно из многих окон сообщений, генерируемых Excel

В этом коде свойство ThisWorkbook.Name возвращает имя текущей рабочей книги.

Функция MsgBox служит для организации диалоговых окон, содержащих какие-либо сообщения. После своего появления на экране окно сообщения ждет, пока пользователь щелкнет на одной из кнопок, присутствующих в окне. В зависимости от того, на какой кнопке щелкнул пользователь, функция возвращает определенное целое число. Функция MsgBox имеет следующий синтаксис:

MsgBox (приглашение [, кнопки] [, заголовок] [, файл_справки, содержание])

Приглашение (prompt) - единственный обязательный аргумент этой функции. Значением этого аргумента служит строка текста, которая появляется как сообщение в диалоговом окне. Эта строка текста должна быть заключена в двойные кавычки. Отметим использование круглых скобок в синтаксисе MsgBox - они указывают на то, что в данном случае MsgBox является функцией, возвращающей какое-либо значение. Если скобки опушены, то для VBA это признак того, что данное выражение значение не возвращает. Если вы хотите возвратить значение, надо использовать код, подобный следующему:

Dim iResponse As Integer

iResponse = MsgBox (“Сохранить изменения в ‘ ” &_

 ThisWorkbook.Name & “ ‘?”, vbYesNoCancel + vbExclamation)

Если не указан аргумент кнопки, то VBA предполагает, что в диалоговом окне сообщения присутствует только кнопка ОК. Аргумент кнопки - очень "богатый" по своим возможностям аргумент, который позволяет управлять следующими параметрами окна сообщения.

  • Количество кнопок в окне.

  • Типы кнопок и их размещение в окне.

  • Пиктограмма, отображаемая в окне.

  • Какая кнопка назначается кнопкой по умолчанию.

  • Режим (модальность) окна сообщения.

В табл. 5.1 показаны возможные установки для этого аргумента. В этой таблицы значения аргумента разбиты на группы. Первая группа значений устанавливает число и тип кнопок. Вторая позволяет выбрать стиль пиктограммы, отображаемой в диалоговом окне сообщения. Третья назначает кнопку по умолчанию. Четвертая группа устанавливает режим окна сообщения. Для создания конечного значения аргумента кнопки можно использовать только одно значение из каждой группы, объединив их знаком "плюс".

Таблица 5.1. Установки для аргумента кнопки функции MsgBox

Группа

Константа

Значение

Описание

Группа 1

vbOKOnly

0

Отображает только кнопку ОК (установка по умолчанию)

vbOKCancel

1

Отображает кнопки ОК и Отмена1

vbAbortRetryIgnore

2

Отображает кнопки Стоп, Повтор и Пропустить

voYesNoCancel

3

Отображает кнопки Да, Нет и Отмена

vbYesNo

4

Отображает кнопки Да и Heт

vbRetryCancel

5

Отображает кнопки Повтор и Отмена

Группа 2

vbCritical

16

Отображает запрещающую пиктограмму (белый знак × в красном круге)

vbQuestion

32

Отображает предупреждающую пиктограмму (знак вопроса на белом фоне)

vbExclamation

48

Отображает предупреждающую пиктограмму (знак вопроса в красном треугольнике)

vbInformation

64

Отображает информационную пиктограмму (знак "i" на белом фоне)

Группа 3

vbDefaultButton1

0

Первая кнопка - кнопка по умолчанию

vbDefaultButton2

256

Вторая кнопка - кнопка по умолчанию

vbDefaultButton3

512

Третья кнопка - кнопка по умолчанию

vbDefaultButton4

768

Четвертая кнопка - кнопка по умолчанию

Группа 4

vbApplicationModal

0

Режим приложения: пользователь должен закрыть окно сообщения перед продолжением работы в текущем приложении

vbSystemModal

4096

Системный режим: все приложения недоступны, пока пользователь не закроет окно сообщения

Дополнительная группа

vbMsgBoxHelpButton

16384

Отображает кнопку Справка

vbMsgBoxSetForeground

65536

Делает окно сообщения окном переднего плана

vbMsgBoxRight

524288

Отображает окно сообщения, выровненным по правому краю окна приложения

vbMsgBoxRtlReading

1048576

Для иврита и арабского языка указывает, что текст должен выводиться справа налево

Чтобы не ошибиться при вводе значений аргумента кнопки, используйте список констант, который появляется после ввода знака "+". Знак "+" используется для объединения нескольких констант при задании сложного аргумента кнопки. - Прим. ред.

Чтобы просмотреть список всех внутренних констант Visual Basic, откройте с помощью клавиши <F2> окно просмотра объектов Object Browser и выберите класс Constants (Константы). В этом же окне можно найти все внутренние константы Excel.

Аргумент заголовок позволяет задать текст, помещаемый в строке заголовка диалогового окна сообщения. Если этот аргумент опущен, то в строке заголовка отображается Microsoft Excel.

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

Напомню, что сейчас мы рассматриваем MsgBox как функцию, это подразумевает, что она должна возвращать значение. В табл. 5.2 представлен список значений, возвращаемых функцией MsgBox. Возвращаемое значение зависит от того, на какой кнопке щелкнул пользователь в окне сообщения.

Таблица 5.2. Значения, возвращаемые функцией

Константа

Значение

Нажатая кнопка

vbOK

1

ОК

vbCancel

2

Отмена

vbAbort

3

Стоп

vbRetry

4

Повтор

vbIgnore

5

Пропустить

vbYes

6

Да

vbNo

7

Нет

Глядя на эту таблицу, вы можете задать вопрос: "Какой тип данных надо назначить переменной, которая будет принимать возвращаемое функцией MsgBox значение?". Наилучший тип переменной, принимающей значение функции MsgBоx, - Integer. В следующем примере мы создадим окно сообщения с несколькими кнопками, а затем покажем возвращаемое значение в другом окне сообщения.

  1. Откройте редактор Visual Basic.

  2. Щелкните правой кнопкой мыши на элементе ЭтаКнига в окне проектов Project Explorer.

  3. В контекстном меню выберите команду Inserts Module (Вставка Модуль).

  4. Выполните команду Insert Procedure (Вставка Процедура).

  5. Введите название процедуры ПримерОСообщения и нажмите клавишу <Enter>.

  6. Введите следующий код процедуры:

Dim iResult As Integer

iResult = MsgBox(“Щелкните на кнопке”, vbYеsNoCancel)

MsgBox iResult

  1. Нажмите клавишу <F5> для выполнения процедуры. Отобразится окно сообщения, как на рис. 5.2.

Рис. 5.2. В соответствии с заданными аргументами окно сообщения содержит три кнопки

  1. Щелкните на кнопке Да. Следующее диалоговое окно должно вывести цифру 6. Посмотрите в табл. 5.2, чтобы удостовериться, что число 6 - результат щелчка на кнопке Да. Щелкните на кнопке ОК, второе окно сообщения закроется, и вы вернетесь в редактор Visual Basic.

  2. Снова нажмите клавишу <F5> для выполнения процедуры. Теперь в окне сообщения щелкните на кнопке Нет. Во втором окне сообщения отобразится цифра 7. Для возврата в редактор Visual Basic щелкните на кнопке ОК.

  3. Нажмите клавишу <F5> еще раз. В окне сообщения щелкните на кнопке Отмена. Во втором окне сообщения отобразится цифра 2. Щелкните на кнопке ОК.

Теперь вы знаете, как показать значение, возвращаемое окном сообщения. В 6-м часе "Логика условных операторов" вы узнаете, как можно использовать это значение.