[an error occurred while processing this directive] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1-й час. Знакомство с Visual Basic for Applications 3-й час. Работа с элементами управления 4-й час. Переменные и константы 6-й час. Логика условных операторов 7-й час. Циклические вычисления 9-й час. Основные объекты Excel 11-й час. Редактор Visual Basic 15-й час. Автоматизация экранных форм 20-й час. Получение внешних данных |
5-й час. Ввод данныхВ предыдущих часах в примерах, иллюстрирующих различные темы, несколько раз использовались операторы MsgBox и InputBox. В этом часе мы подробно изучим эти операторы и методы их применения в кодах VBA. В 1-м часе "Знакомство с Visual Basic for Applications" обсуждались ограничения, присущие записанным макросам. Одно из таких ограничений - невозможность ввести какую-либо информацию во время выполнения макроса. В этом часе мы покажем, как организовать ввод информации при выполнении приложения. В этом часе будут рассмотрены следующие вопросы.
Функция MsgBoxПосмотрите на рис. 5.1, на котором показано, что произойдет, если вы попытаетесь закрыть рабочую книгу без ее сохранения. Вы можете подумать, что создание такого окна сообщения требует многих часов программирования. Заблуждаетесь! Такое окно можно создать с помощью всего одной строчки кода VBA:
Отметим, что оператор MsgBox записан здесь в две строки, хотя в окне кода редактора Visual Basic он может располагаться в одну строку. В VBA символами продолжения строки служит пробел с последующим символом подчеркивания.
Рис. 5.1. Одно из многих окон сообщений, генерируемых Excel В этом коде свойство ThisWorkbook.Name возвращает имя текущей рабочей книги. Функция MsgBox служит для организации диалоговых окон, содержащих какие-либо сообщения. После своего появления на экране окно сообщения ждет, пока пользователь щелкнет на одной из кнопок, присутствующих в окне. В зависимости от того, на какой кнопке щелкнул пользователь, функция возвращает определенное целое число. Функция MsgBox имеет следующий синтаксис:
Приглашение (prompt) - единственный обязательный аргумент этой функции. Значением этого аргумента служит строка текста, которая появляется как сообщение в диалоговом окне. Эта строка текста должна быть заключена в двойные кавычки. Отметим использование круглых скобок в синтаксисе MsgBox - они указывают на то, что в данном случае MsgBox является функцией, возвращающей какое-либо значение. Если скобки опушены, то для VBA это признак того, что данное выражение значение не возвращает. Если вы хотите возвратить значение, надо использовать код, подобный следующему:
Если не указан аргумент кнопки, то VBA предполагает, что в диалоговом окне сообщения присутствует только кнопка ОК. Аргумент кнопки - очень "богатый" по своим возможностям аргумент, который позволяет управлять следующими параметрами окна сообщения.
В табл. 5.1 показаны возможные установки для этого аргумента. В этой таблицы значения аргумента разбиты на группы. Первая группа значений устанавливает число и тип кнопок. Вторая позволяет выбрать стиль пиктограммы, отображаемой в диалоговом окне сообщения. Третья назначает кнопку по умолчанию. Четвертая группа устанавливает режим окна сообщения. Для создания конечного значения аргумента кнопки можно использовать только одно значение из каждой группы, объединив их знаком "плюс". Таблица 5.1. Установки для аргумента кнопки функции MsgBox
Чтобы не ошибиться при вводе значений аргумента кнопки, используйте список констант, который появляется после ввода знака "+". Знак "+" используется для объединения нескольких констант при задании сложного аргумента кнопки. - Прим. ред. Чтобы просмотреть список всех внутренних констант Visual Basic, откройте с помощью клавиши <F2> окно просмотра объектов Object Browser и выберите класс Constants (Константы). В этом же окне можно найти все внутренние константы Excel. Аргумент заголовок позволяет задать текст, помещаемый в строке заголовка диалогового окна сообщения. Если этот аргумент опущен, то в строке заголовка отображается Microsoft Excel. Аргументы файл_справки и содержание используются тогда, своего приложения для своего приложения собственную справочную систему. Напомню, что сейчас мы рассматриваем MsgBox как функцию, это подразумевает, что она должна возвращать значение. В табл. 5.2 представлен список значений, возвращаемых функцией MsgBox. Возвращаемое значение зависит от того, на какой кнопке щелкнул пользователь в окне сообщения. Таблица 5.2. Значения, возвращаемые функцией
Глядя на эту таблицу, вы можете задать вопрос: "Какой тип данных надо назначить переменной, которая будет принимать возвращаемое функцией MsgBox значение?". Наилучший тип переменной, принимающей значение функции MsgBоx, - Integer. В следующем примере мы создадим окно сообщения с несколькими кнопками, а затем покажем возвращаемое значение в другом окне сообщения.
Рис. 5.2. В соответствии с заданными аргументами окно сообщения содержит три кнопки
Теперь вы знаете, как показать значение, возвращаемое окном сообщения. В 6-м часе "Логика условных операторов" вы узнаете, как можно использовать это значение. Функция InputBoxФункция MsgBox хороша, когда от пользователя надо получить простые данные - ответы типа Да-Нет или ОК-Отмена. Если необходимо ввести число или текст, то применяется функция InputBox. Эта функция отображает диалоговое окно ввода, содержащее поле ввода и поясняющий текст. Функция InputBox имеет следующий синтаксис:
Эта функция требует обязательного задания только аргумента приглашение. Так же, как и в функции MsgBox, значением аргумента приглашение служит текстовая строка, которая отображается в диалоговом окне ввода в качестве сообщения. Аргумент заголовок используется для задания текста, который помещается в строке заголовка окна ввода. Если этот аргумент не задан, то в строке заголовка отображается Microsoft Excel. Аргумент по_умолчанию задает значение, которое отображается по умолчанию в поле ввода, пока пользователь не введет свое значение. Если этот аргумент опустить, то поле ввода отображается пустым. Необязательные аргументы xпоз и yпоз задают положение окна ввода на экране. Аргументы файл_справки и содержание используются в том случае, если вы создаете для своего приложения собственную систему справки. Возвращаемым значением функции InputBox является значение, введенное пользователем в поле ввода. Для иллюстрации использования этой функции выполните следующий пример.
Этот код открывает окно ввода для ввода числа, которое затем будет отображено в окне сообщения и помещено в текущую ячейку рабочего листа.
Если вы заглянете в справочную систему VBA, то прочитаете, что функция InputBox возвращает строковое (текстовое) значение. Это не совсем точно. В последней версии Visual Basic (и, следовательно, VBA) тип возвращаемого значения определен как Variant, т.е. тип определяется введенным значением. Иначе как бы сработала наша процедура, где переменная iResult объявлена как Integer? Если пользователь щелкнет на кнопке Отмена, то в этом случае функция InputBox возвращает строку нулевой длины (“ ”).
Рис. 5.3. Окно ввода готово к вводу числа Метод InputBoxExcel предлагает еще один путь получения данных от пользователя, который называется методом InputBox. Метод InputBox на первый взгляд имеет только пару незначительных отличий от функции InputBox. Чтобы разобраться в этих отличиях, рассмотрим сначала синтаксис метода InputBox.
Синтаксис очень похож на синтаксис функции InputBox. Отметим, что оператор начинается со слова Application. Excel является собственником метода InputBox, поэтому здесь присутствует слово Application (приложение). Более подробно суть методов рассмотрена в 8-м часе. Большинство аргументов вам знакомы. Аргументы слева и сверху играют ту же роль, что и аргументы хпоз и yпоз в функции InputBox. Основное отличие синтаксиса метода InputBox от синтаксиса одноименной функции заключается в последнем аргументе тип (type). Необязательный аргумент тип позволяет явно указать тип возвращаемого значения. В табл. 5.3 содержатся значения, которые может принимать этот аргумент. Таблица 5.3. Значения аргумента тип
Обратите внимание, что в последовательности чисел, задающих значение аргумента тип, есть пропуски, например между числами 4 и 8 или между 16 и 64. Это сделано потому, что можно суммировать значения данного аргумента. Например, если вы хотите, чтобы метод мог возвращать как текст, так и числа, сделайте аргумент тип равным 3 (1 + 2). Если аргумент тип не задан, то метод InputBox по умолчанию возвращает текст. Для демонстрации метода InputBox выполните следующие действия.
Запятые в выражении Application.InputBox бронируют" места для тех аргументов, которые мы опустили. Последний аргумент, тип, имеет значение 1. Это показывает, что допустимыми вводимыми значениями являются только числа. Отметьте, что единственное отличие кода этой процедуры от кода процедуры ПримерВвода заключается в операторе Application.InputBox.
Рис. 5.4. Это окно сообщения указывает на ошибку выполнения процедуры. Нельзя допустить, чтобы пользователи вашего приложения получали такие окна сообщений! Вы видели, что одним из преимуществ метода InputBox является возможность внутренней обработки ошибок. Другое отличие метола от функции заключается в значении, которое они возвращают, когда пользователь щелкает на кнопке Отмена. В этом случае функция InputBox возвращает строку нулевой длины, а метод InputBox - значение False (Ложь).
Рис. 5.5. Пользователю деликатно сообщают, что введено неверное число. Именование аргументовВ предыдущем примере мы применили оператор
Если в этом операторе вы пропустите хоть одну запятую, то, вероятно, получите сообщение об ошибке при его выполнении. Идентификация аргументов путем их местоположения в списке аргументов - большой недостаток подобных операторов. Для исправления этого недостатка VBA поддерживает именование аргументов. Использование имен аргументов позволяет задавать их в любом порядке. Например, в нашем случае оператор с заданным аргументом mun (type) можно записать так:
Для использования именованных аргументов введите имя аргумента, двоеточие, знак равенства и значение аргумента. Синтаксис оператора (и, следовательно, имена аргументов) показаны в экранной подсказке, которая появляется после ввода оператора. Можно также обратиться к справочной системе VBA. Если экранная подсказка не отображается, выполните команду Tools > Options (Сервис > Параметры) и в открывшемся диалоговом окне Options (Параметры) на вкладке Editor (Редактор) установите флажок опции Auto Quick Info (Автоматическая экранная подсказка)/ Объединение текстовых строкЕсли надо объединить несколько текстовых строк в одну, используется символ конкатенации (&) (в листинге 5.1 показано использование этого символа). Листинг 5.1. Объединение строк
На рис. 5.6 показано второе окно сообщения, заданное в строке 16 листинга. С помощью символа конкатенации можно составлять строки, содержащие текст, значения переменных, числа и т.д.
Рис. 5.6. Объединение строк - полезное для создания текста сообщений РезюмеВ этом часе мы изучили несколько способов ввода информации пользователем: с помощью диалоговых окон сообщений и диалоговых окон ввода. В следующем часе мы рассмотрим средства, позволяющие проверять данные, введенные пользователем, а также строить процедуры, выполняющие различные действия в зависимости от введенной пользователем информации. Вопросы и ответыВопрос. Что лучше использовать: функцию InputBox или метод InputBox? Ответ. Лучшим выбором будет метод InputBox, так как функция InputBox не обладает встроенными средствами обработки ошибок. Вопрос. Что делать со значением, возвращаемым функцией или методом InputBox? Ответ. Возвращаемое значение вы можете использовать в окнах сообщений, поместить в ячейку рабочего листа, применить в вычислениях, использовать в качестве имени какого-либо объекта и т.п. Вопрос. Где можно применить окна сообщений? Ответ. Окна сообщений можно использовать как элементы интерфейса, позволяющиеся пользователю обмениваться информацией с приложением. ПрактикумС помощью тестов и упражнений вы проверите, насколько хорошо усвоили изложенный материал. Ответы на вопросы смотрите в Приложении. Тесты
УпражнениеСоздайте процедуру с именем ВашИнфо. Эта процедура должна выполнять следующие задачи.
1 На протяжении всей книги предполагается, что пользователь работает с русской версией Excel 2000, поэтому, несмотря на англоязычность VBA, кнопки в создаваемых окнах автоматически будут иметь названия на русском языке. - Прим. ред. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[an error occurred while processing this directive] |