Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

392

Часть IV. Пользовательские формы

Функция VBA MsgBox

Функция VBA MsgBox предоставляет пользователю простой способ отображения со­ общения. Также она задает ответную реакцию пользователя на запрос (передает резуль­ тат щелчка на кнопке ОК или Отмена). Функция MsgBox применяется во многих при­ мерах книги в качестве средства отображения значений переменных.

Ниже приведен синтаксис этой функции.

MsgBox{з а п р о с [, кн о п ки ] [ , за го л о в о к] [, сп р а вка , р а зд е л ])

З а п р о с . Определяет текст, который будет отображаться в окне сообщения

(обязательный параметр).

К н о п к и . Содержит числовое выражение, которое определяет кнопки, отображае­

мые в окне сообщения (необязательный параметр). Возможные значения приво­ дятся в табл. 12.2.

З а г о л о в о к . Содержит заголовок окна сообщения (необязательный параметр).

С п р а в к а , р а з д е л . Указывают файл и раздел справочной системы (необязатель­

ные параметры).

Окна сообщений несложно изменить. Как правило, для этого применяется параметр К н о п к и . (В табл. 12.2 приведены константы, которые можно использовать в качестве значений этого параметра.) С его помощью указываются отображаемые кнопки, отмеча­ ется необходимость использования значка и определяется кнопка по умолчанию.

Таблица 12.2. Константы, используемые для выбора кнопок в функции

M sg b o x

Константа

Значение

vbOKOnly

0

vbOKCancel

l

vb A bo rtR etryIg no re

2

vbYesNoCancel

3

vbYesNo

4

vbRe t г у Canee1

5

v b C r itic a l

16

vbQ uestion

32

vbE xclam ation

48

v b ln fo rm a tio n

64

v b D e fa u ltB u tto n l

0

vb D e fa ultB utton 2

256

vb D e fa ultB utton 3

512

vbDe f a u ltB u tto n 4

768

vbSystemModal

4096

vbMsgBoxHelpButton

16384

Назначение

Отображает только кнопку ОК

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

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

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

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

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

Отображает значок важного сообщения

Отображает значок важного запроса

Отображает значок предупреждающего сообщения

Отображает значок информационного сообщения

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

По умолчанию выделена третья кнопка

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

Выполнение приложений приостанавливается до тех пор, пока пользователь не ответит на запрос в окне сообщения (работает не во всех случаях)

Отображает кнопку справки. Имейте в виду, что не существует способа отобразить какой-либо раздел справки после щелчка на этой кнопке

Глава 12. Создание собственных диалоговых окон

393

Можно использовать функцию M sgBox в качестве процедуры (для отображения со­ общения), а также присвоить возвращаемое этой функцией значение переменной. Функ­ ция MsgBox возвращает результат, представляющий кнопку, на которой щелкнул поль­ зователь. В следующем примере отображается сообщение и не возвращается результат.

Sub MsgBoxDemo()

MsgBox "При выполнении м акроса ошибок не произош ло ."

End Sub

Чтобы получить результат из окна сообщения, присвойте возвращаемое функцией MsgBox значение переменной. В следующем коде используется ряд встроенных констант (табл. 12.3), которые упрощают управление возвращаемыми функцией MsgBox значениями.

Sub GetAnswer ()

 

 

 

Dim Ans

As

In te g e r

 

 

Ans

= MsgBox( "П родолж ать?", vbYesNo)

Select

Case

Ans

 

 

 

Case

vbYes

Ans

 

Yes]

'

. . . [ код

при

равно

Case

vbNo

Ans

 

No]

1

. . . [ код

при

равно

End

S e le c t

 

 

 

 

End Sub

 

 

 

 

 

Таблица 12.3. Константы, возвращаемые M sgbox

 

Константа

Значение

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

vbOK

1

OK

vbCancel

2

Отмена

vbAbort

3

Прервать

vbRetry

4

Повтор

vblgnore

5

Пропустить

vbYes

6

Да

vbNo

7

Нет

Функция MsgBox возвращает переменную, имеющую тип Integer. Вам необяза­ тельно использовать переменную для хранения результата выполнения функции MsgBox. Следующая процедура представляет собой вариацию процедуры GetAnswer.

Sub GetAnswer2 ()

 

 

 

I f MsgBox( "П родолж ать? ",

vbYesNo) = vbYes Then

'

. . . [код

при

Ans

равно

Yes]

Else

 

 

Ans

 

No]

. . . [код

при

равно

End

I f

 

 

 

 

End Sub

В следующем примере функции используется комбинация констант для отображения окна сообщения с кнопкой Да, кнопкой Нет и значком вопросительного знака. Вторая кнопка используется по умолчанию (рис. 12.5). Для простоты константы добавлены в пе­ ременную Conf ig.

Private F un ction

C ontinueP rocedure () As Boolean

Dim C onfig

As

In te g e r

Dim Ans

As

In te g e r

Config

= vbYesNo + vb Q ue stion + v b D e fa u ltB u tto n 2

з а г о л о в о к

396

Часть IV. Пользовательские формы

М н о ж е ст ве н н ы й _ вы б о р . Необязательный параметр. Если он имеет значение ИСТИНА, можно выбрать несколько имен файлов. По умолчанию данный пара­

метр имеет значение ЛОЖЬ.

Аргумент филь тр_файла определяет содержимое раскрывающегося списка Тип фай­ лов, находящегося в окне Открытие документа. Аргумент состоит из строки, определяющей отображаемое значение, а также строки действительной спецификации типа файлов, в кото­ рой находятся групповые символы. Оба элемента аргумента разделены запятыми. Если этот аргумент не указывать, то будет использовано значение, заданное по умолчанию.

"Все файлы

Обратите внимание на первую часть строки Все файлы (*. *) . Это текст, отобра­ жаемый в раскрывающемся списке тип файлов. Вторая часть строки * . * указывает тип отображаемых файлов.

В следующих инструкциях переменной F i l t присваивается строковое значение. Эта строка впоследствии используется в качестве аргумента ф ильт р_ф айла метода G e tO p e n F ile n a m e . В данном случае диалоговое окно предоставит пользователю воз­

можность выбрать один из четырех типов файлов (кроме варианта Все

файлы). Если

задать

значение переменной F i l t , то будет

использоваться оператор

конкатенации

строки VBА. Этот способ упрощает управление громоздкими и сложными аргументами.

F i l t

= "Текстовые файлы ( * . t x t ) , * . t x t , "

& _

 

"Файлы

L o tu s

( * . p r n ) , * . p r n , "

& _

 

 

"Файлы,

разделенные запятой

( * . c s v ) , * . c s v , " & _

 

"Файлы ASCII

( * . a s c ) , * . a s c , "

& _

 

 

"Все

файлы

( * . * ) , * . * "

 

 

 

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

В следующем примере у пользователя запрашивается имя файла. При этом в поле ти­ па файлов используются пять фильтров.

Sub G e tIm p o rtF ile N a m e ()

Dim

F i l t

As

S tr in g

Dim

F ilt e r ln d e x As In te g e r

Dim

T it le

As

S trin g

Dim

FileNam e

As V a ria n t

'Настройка списка фильтров

F i l t = "Текстовые файлы ( * . t x t ) , * . t x t , " & _

"Файлы

L o tu s

( * . p r n ) , * . p r n , "

& _

"Файлы,

разделенные запятой

( * . c s v ) , * . c s v , " & _

"Файлы

ASC II

( * . a s c ) , * . a s c , "

& _

"Все файлы

( * . * ) , * . * "

 

' По умолчанию

используется фильтр * . *

F ilt e r ln d e x =

5

 

 

'Заголовок окна

T i t l e = "Выберите импортируемый файл" 1 Получение имени файла

FileName = A p p lic a tio n . GetOpenFilename _ ( F i l e F i l t e r : = F i l t , _

F ilt e r ln d e x : = F ilte r In d e x , _ T it le : = T it le )

398

 

Часть IV. Пользовательские формы

1 Получение

имени файла

FileNam e

= A p p lic a tio n . GetOpenFilename

 

( F i l e F i l t e r : = F i l t , _

 

F ilt e r ln d e x : = F ilte r In d e x , _

 

T i t l e : = T it le , _

 

M u ltiS e le c t: =True)

Закрытие

окна при использовани и кн о п ки "Отмена"

I f

Not IsA rra y (F ile N a m e ) Then

 

MsgBox

"Файлы не вы браны ."

End

E x it Sub

I f

 

'Отображение п олного п ути и имени файла

For

i

= LBound(FileNam e) To

UBound(FileName)

Msg

= Msg & F ile N a m e (i)

& vb C rL f

N ext

i

"Вы вы б рали:" & vb C rL f & Msg

MsgBox

End Sub

 

 

 

Обратите внимание: переменная F ile N a m e определена как массив переменного типа (а не как строка в предыдущем примере). Причина заключается в том, что потенциально F ile N a m e может содержать массив значений, а не только одну строку.

Компакт-диск

Два рассмотренных в этом разделе примера доступны на прилагаемом к книге компакт-диске в файле prom pt f o r f i l e . xlsm .

Метод Excel G etS aveA sFilenam e

Данный метод имеет много общего с методом G e tO p e n F ile n a m e . Он отображает диалоговое окно Сохранение документа и дает пользователю возможность выбрать (или указать) имя сохраняемого файла. В результате возвращается имя файла, но никакие действия не предпринимаются.

Этот метод имеет следующий синтаксис:

A p p lic a tio n .G e tS a v e A s F ile n a m e {н а ча л ьн о е _ и м я, фильтр_файла, индекс_ф ильт ра, з а г о л о в о к , т екст _кнопки)

Ниже описаны аргументы метода.

На ча л ьн о е _ и м я . Указывает предполагаемое имя файла (необязательный параметр).

Ф ильт р_ф айла. Содержит критерий фильтрации отображаемых в окне файлов

(необязательный параметр).

И н де кс _ ф и л ьт р а . Код критерия фильтрации файлов, который используется по

умолчанию (необязательный параметр).

З а г о л о в о к . Определяет текст заголовка диалогового окна (необязательный па­

раметр).

Т е к с т _ кн о п к и . Предназначен только для платформ Macintosh.