Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Организация диалога с пользователем



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

Имеется ряд операторов, свойств и функций, предназначенных для выдачи сообщений и привлечения внимания пользователя: среди них оператор 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.011 с)...