Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Во время работы процедуры часто бывает нужно вывести то или иное сообщение для пользователя или проинформировать его о ходе выполнения процедуры. Если ее выполнение может потребовать длительного промежутка времени, просто необходимо сообщить пользователю о требуемом времени выполнения и о том, как продвигается выполнение операции. Часто приходится выдавать сообщения о тех или иных ошибках пользователя, например, в тех случаях, когда пользователь задал недопустимое значение параметра процедуры или аргумента пользовательской функции.
Имеется ряд операторов, свойств и функций, предназначенных для выдачи сообщений и привлечения внимания пользователя: среди них оператор Beep, свойства SoundNote и StatusBar, а также функция MsgBox.
Самый простой способ привлечь внимание пользователя к происходящему — это подача звукового сигнала с помощью встроенного динамика посредством оператора Beep. Мы не станем особо распространяться по этому поводу — заметим лишь, что для особо важных событий можно варьировать количество выдаваемых сигналов, подав его дважды или даже трижды. Однако не стоит злоупотреблять этим оператором — если, конечно, вы действительно хотите привлечь внимание пользователя. Слишком частое использование однообразного звукового сигнала может вызвать лишь раздражение. Разумное его использование состоит в том, чтобы подать сигнал об ошибке или сообщить о завершении особо длительной операции.
Существует ли альтернатива однообразному звуку, порождаемому оператором Beep? Если ваш компьютер имеет специальное звуковое оборудование (звуковую карту и микрофон), то вы можете заставить свои процедуры издавать намного более разнообразные звуки, в том числе и воспроизводить запись собственного голоса, произносящего вслух те или иные сообщения. Например, можно поместить звуковое примечание в ячейку и затем воспроизвести его в подходящий момент. В VBAимеется свойство SoundNote (звуковое примечание) и объект SoundNote класса Range, с помощью которого вы можете импортировать звуковые файлы, записывать их и воспроизводить звуковые примечания к ячейке.
Для импортирования звукового файла в качестве звукового примечания используется метод Import, имеющий следующий синтаксис:
объект. Import(" звуковойФайл ")
где:
объект — это объект SoundNote, являющийся звуковым примечанием к ячейке;
звуковойФайл — это строка, представляющая собой полный путь и имя соответствующего файла.
Например, следующий оператор импортирует звуковой файл DING.WAV в качестве звукового примечания к активной ячейке:
ActiveCell.SoundNote.Import("C:\WINDOWS\DING.WAV")
Соответственно, метод Record позволяет вам (естественно, при наличии соответствующего оборудования: звуковой платы и микрофона) записать собственное звуковое примечание. При использовании этого метода во время выполнения вашей процедуры выводится специальное диалоговое окно Запись, с помощью которого можно записать звуковое примечание. Наконец, метод Play позволяет воспроизвести имеющееся звуковое примечание к ячейке. Методы Record и Play не имеют аргументов.
Поскольку запись и воспроизведение звуков требует наличия специального оборудования и драйверов, то правильно написанная процедура, прежде чем применять подобные возможности, должна проверить саму возможность их выполнения. Для этого можно использовать имеющиеся у объекта Application свойства CanPlaySounds и CanRecordSounds.
Вот пример правильного использования метода Play:
If Application.CanPlaySounds Then
Range("ErrorMessage_1").SoundNote.Play
End If
Перейдем теперь к выдаче текстовых сообщений. Начнем с выдачи сообщений в строке состоянияExcel[5]. Строка состояния расположена обычно в нижней части окна Excel, однако эта строка состояния может быть скрыта и не отображаться на экране. Показом и скрытием строки состояния управляет команда
Ø Вид Ø Строка состояния
Поэтому прежде, чем выводить сообщение в строке состояния, полезно обеспечить вывод самой строки состояния на экран. Сделать это можно не только с помощью выполнения соответствующей команды, но и с помощью изменения свойства DisplayStatusBar объекта Application следующим образом:
Application.DisplayStatusBar = True
Если же установить для этого свойства значение False, строка состояния будет скрыта.
Во время выполнения вашей процедуры вы можете помещать в отображаемую строку состояния свои сообщения о ходе выполнения процедуры. Поместить свой текст в эту строку можно с помощью обычного оператора присваивания, например:
Application.StatusBar = "Подождите, пожалуйста..."
Во время очень длительных процедур полезно время от времени помещать в эту строку сообщение о ходе выполнения процедуры, например, о том, какая часть данных уже обработана. Однако не следует делать это слишком часто — ведь на выдачу подобного сообщения также тратится время, и тем самым вы можете еще более замедлить и без того долго выполняемую процедуру, к тому же слишком часто сменяемые сообщения пользователь просто не будет успевать прочесть.
При выходе из процедуры, которая выдавала свои сообщения в строку состояния, не забудьте вернуть контроль над строкой состояния приложению Excel, иначе ваше последнее сообщение останется в строке состояния"навечно". Делается это следующим образом:
Application.StatusBar = False
Выдача сообщений в строке состоянияExcel — это единственный способ выдачи сообщений пользователю, не останавливающий процесс выполнения процедуры. В некоторых случаях, однако, требуется, чтобы пользователь отреагировал на выдаваемое сообщение прежде, чем процедура будет продолжена, и при этом, возможно, выбрал одну из имеющихся альтернатив или же ввел какие-либо данные. В таких случаях используются стандартные диалоговые окна— окно сообщения или окно ввода данных, которые можно вывести на экран с помощью функций VBAMsgBox и InputBox соответственно. Этими функциями можно пользоваться не только в Excel, но и в других приложениях Office.
Функция MsgBox, которую мы уже использовали в примере первого параграфа этой главы, имеет следующий синтаксис:
MsgBox(сообщение [, кнопки ][, заголовок ][, файлСправки, контекст ])
где:
сообщение — это, собственно, и есть текст того сообщения, которое должно быть отображено в диалоговом окне. Этот параметр является обязательным, а все остальные — нет, и могут быть опущены.
кнопки — это числовое выражение, являющееся суммой значений, определяющих, какие именно кнопки должны быть выведены в диалоговом окне, какой значок диалогового окна следует использовать, указывает, какая кнопка должна иметь фокус по умолчанию и, наконец, модальность этого окна. При задании этой величины удобно использовать следующие встроенные константы VBA:
Таблица 6.3-3. Встроенные константы VBA для свойств диалогов.
Константа | Значение | Описание |
Кнопки | ||
vbOKOnly | Выводится только кнопка OK (принимается по умолчанию) | |
vbOKCancel | Выводятся кнопки OK и Отмена | |
vbAbortRetryIgnore | Выводятся кнопки Прекратить, Повторить и Игнорировать | |
vbYesNoCancel | Выводятся кнопки Да, Нет и Отмена | |
vbYesNo | Выводятся кнопки Да и Нет | |
vbRetryCancel | Выводятся кнопки Повторить и Отмена | |
Значки | ||
vbCritical | Выводится значок "Критическое сообщение" | |
vbQuestion | Выводится значок "Вопрос " | |
vbExclamation | Выводится значок "Предупреждающее сообщение" | |
vbInformation | Выводится значок "Информационное сообщение" | |
Фокус по умолчанию | ||
vbDefaultButton1 | Фокус устанавливается на первой кнопке (принимается по умолчанию) | |
vbDefaultButton2 | Фокус устанавливается на второй кнопке | |
vbDefaultButton3 | Фокус устанавливается на третьей кнопке | |
Модальность | ||
vbApplicationModal | Приостановить выполнение данного приложения до тех пор, пока не будет получен ответ пользователя (принимается по умолчанию) | |
vbSystemModal | Приостановить работу всех приложений системы до тех пор, пока не будет получен ответ пользователя |
Нужное значение параметра кнопки можно получить сложением этих констант, допускается выбор не более чем одной константы из каждой группы, т. е. можно выбрать одну из констант в группе "Кнопки", еще одну — в группе "Значки" и т. д. По умолчанию принимается значение этого параметра, равное нулю, что соответствует выбору трех констант с нулевым значением:
vbOKOnly + vbDefaultButton1 + vbApplicationModal
Продолжим описание параметров функции MsgBox:
заголовок — это текст, который будет помещен в строку заголовка диалогового окна сообщения. Если этот параметр будет опущен, принимается заголовок "Microsoft Excel".
файлСправки — это текстовая строка, определяющая файл контекстно-зависимой Справки для этого диалогового окна. Если задан этот параметр, то также должен быть задан и следующий параметр.
контекст — это число, определяющее номер раздела в файле контекстно-зависимой Справки.
Наконец, функция MsgBox возвращает значение в точку вызова, которое говорит о том, какую именно кнопку нажал пользователь в диалоговом окне сообщения. Конечно, если там находилась единственная кнопка OK, то выбор у пользователя был не богат, и проверять особенно нечего; если же кнопок было несколько, то после закрытия диалогового окна процедура может проверить, какая именно кнопка была нажата, и в зависимости от выбора пользователя предпринять различные действия.
Для проверки возвращаемого значения также можно использовать встроенные константы VBA:
Таблица 6.3-4. Встроенные константы VBA нажатой кнопки.
Константа | Значение | Нажатая пользователем кнопка |
vbOK | OK | |
vbCancel | Отмена | |
vbAbort | Прекратить | |
vbRetry | Повторить | |
vbIgnore | Игнорировать | |
vbYes | Да | |
vbNo | Нет |
Вот пример процедуры для вывода диалогового окна сообщения с помощью функции MsgBox и анализа возвращаемого этой функцией результата:
Sub Message1()
Dim msgPrompt As String, msgTitle As String
Dim msgButtons As Integer, msgResult As Integer
msgPrompt = "Вы действительно хотите очистить рабочий лист?"
msgButtons = vbYesNoCancel + vbQuestion + vbDefaultButton2
msgTitle = "Очистка рабочего листа"
msgResult = MsgBox(msgPrompt, msgButtons, msgTitle)
Select Case msgResult
Case vbYes
ActiveSheet.Cells.Clear
Case vbNo
Exit Sub
Case vbCancel
Application.Quit
End Select
End Sub
Надеемся, что текст этой процедуры понятен вам и без комментариев.
Как видно из этого примера, вы можете общаться с пользователем с помощью вывода диалоговых окон сообщений и даже получать при этом информацию о реакции пользователя на эти сообщения. Однако при этом пользователь может выбрать только одну из командных кнопок диалогового окна, ввести же какие-либо данные таким способом невозможно (рис. 6.3-5).
Рис. 6.3-5. Вывод диалогового окна сообщения с помощью функции MsgBox
Для ввода данных проще всего воспользоваться другой функцией — InputBox, во многом похожей на только что описанную нами функцию MsgBox. Она расширяет возможности организации диалога с пользователем, позволяя пользователю ввести данные. Эта функция имеет следующий синтаксис:
InputBox(сообщение [, заголовок ][, умолчание ][,поз X ][,поз Y ] [, файлСправки, контекст ])
где:
сообщение — это подсказывающее сообщение, которое нужно вывести в диалоговом окне;
заголовок — это текст, который будет помещен в строку заголовка диалогового окна. Если этот параметр будет опущен, строка заголовка будет пустой.
умолчание — это выводимое в поле ввода начальное значение, предлагаемое пользователю в качестве стандартного.
позX — это число, определяющее горизонтальное смещение диалогового окна от левого края экрана (измеряется в единицах, равных 1/72 дюйма). Если этот параметр опущен, окно будет выравниваться по горизонтали по центру экрана.
позY — это число, определяющее вертикальное смещение диалогового окна от верхнего края экрана. Если этот параметр опущен, окно будет выравниваться по вертикали по центру экрана.
файлСправки — это текстовая строка, определяющая файл контекстно-зависимой Справки для этого диалогового окна. Если задан этот параметр, то также должен быть задан и следующий параметр. Если этот параметр присутствует, в диалоговом окне будет дополнительно выведена кнопка "Справка".
контекст — это число, определяющее номер раздела в файле контекстно-зависимой Справки.
Эта функция возвращает в качестве результата либо введенную пользователем в поле ввода строку, если диалог был завершен нажатием кнопки OK, либо пустую строку, если пользователь нажал кнопку Отмена.
Например, следующий оператор присваивает переменной myString введенное пользователем значение:
myString = InputBox("Введите число от 1 до 100:", "Ввод данных")
Дата публикования: 2014-12-28; Прочитано: 1533 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!