Excel полезные коды vba диалоговое окно ввести текст
Использование метода Application.InputBox в VBA Excel, его синтаксис и параметры. Значения, возвращаемые диалогом Application.InputBox. Примеры использования.
Метод Application.InputBox предназначен в VBA Excel для вывода диалогового окна с более расширенными возможностями, чем диалоговое окно, отображаемое функцией InputBox. Главным преимуществом метода Application.InputBox является возможность автоматической записи в поле ввода диапазона ячеек (в том числе одной ячейки) путем его выделения на рабочем листе книги Excel и возвращения различных данных, связанных с ним, а также проверка соответствия возвращаемого значения заданному типу данных.
Синтаксис метода
Application.InputBox ( Prompt , Title , Default , Left , Top , HelpFile , HelpContextID , Type )
Обязательным параметром метода Application.InputBox является Prompt, если значения остальных параметров явно не указаны, используются их значения по умолчанию.
Обратите внимание на то, что
- оператор InputBox вызывает функцию InputBox, а
- оператор Application.InputBox вызывает метод InputBox.
Чтобы не было путаницы, метод InputBox пишут как метод Application.InputBox, в том числе и в справке разработчика.
Параметры метода
Параметр | Описание | Значение по умолчанию |
Prompt | Обязательный параметр. Выражение типа String, отображаемое в диалоговом окне в виде сообщения, приглашающего ввести данные в поле. Разделить на строки сообщение можно с помощью константы vbNewLine. | Нет |
Title | Необязательный параметр. Выражение типа Variant, отображаемое в заголовке диалогового окна. | Слово «Ввод» |
Default | Необязательный параметр. Выражение типа Variant, отображаемое в поле ввода при открытии диалога. | Пустая строка |
Left | Необязательный параметр. Выражение типа Variant, определяющее в пунктах расстояние от левого края экрана до левого края диалогового окна (координата X).* | Горизонтальное выравнивание по центру** |
Top | Необязательный параметр. Выражение типа Variant, определяющее в пунктах расстояние от верхнего края экрана до верхнего края диалогового окна (координата Y).* | Приблизительно равно 1/3 высоты экрана*** |
HelpFile | Необязательный параметр. Выражение типа Variant, указывающее имя файла справки для этого поля ввода. | Нет**** |
HelpContextID | Необязательный параметр. Выражение типа Variant, указывающее идентификатор контекста в справочном разделе файла справки. | Нет**** |
Type | Необязательный параметр. Выражение типа Variant, указывающее тип возвращаемых данных. | 2 (текст) |
* Параметры Left и Top учитываются при отображении диалогового окна методом Application.InputBox в Excel 2003, а в последующих версиях Excel 2007-2016 уже не работают.
**При первом запуске горизонтальное выравнивание устанавливается по центру, при последующих – форма отобразиться в том месте, где ее последний раз закрыли.
***При первом запуске вертикальное расположение приблизительно равно 1/3 высоты экрана, при последующих – форма отобразиться в том месте, где ее последний раз закрыли.
**** Если будут указаны параметры HelpFile и HelpContextID, в диалоговом окне появится кнопка справки.
Возвращаемые значения
Диалоговое окно, созданное методом Application.InputBox, возвращает значение типа Variant и проверяет соответствие возвращаемого значения типу данных, заданному параметром Type. Напомню, что тип значений Variant является универсальным контейнером для значений других типов, а в нашем случае для возвращаемых в зависимости от значения параметра Type.
Аргументы параметра Type и соответствующие им типы возвращаемых значений:
Type | Возвращаемое значение |
Формула | |
1 | Число |
2 | Текст (string) |
4 | Логическое значение (True или False) |
8 | Ссылки на ячейки в виде объекта Range |
16 | Значение ошибки (например, #н/д) |
64 | Массив значений |
Примеры
В отличие от других встроенных диалоговых окон VBA Excel, Application.InputBox при запуске процедуры непосредственно из редактора, открывается прямо в редакторе, и, чтобы выбрать диапазон ячеек на рабочем листе, нужно по вкладке браузера перейти в книгу Excel. Поэтому для тестирования диалога Application.InputBox удобнее создать кнопку, перетащив ее на вкладке «Разработчик» из «Элементов управления формы» (не из «Элементов ActiveX») и в окошке «Назначить макрос объекту» выбрать имя тестируемой процедуры. Чтобы можно было выбрать процедуру сразу при создании кнопки, она должна быть уже вставлена в стандартный программный модуль. Можно назначить процедуру кнопке позже, кликнув по ней правой кнопкой мыши и выбрав в контекстном меню «Назначить макрос…».
Пример 1 – параметры по умолчанию
Тестируем метод Application.InputBox с необязательными параметрами по умолчанию. Аргумент параметра Type по умолчанию равен 2.
Sub Test1() Dim a As Variant a = Application.InputBox(“Выберите ячейку:”) MsgBox a End Sub |
Скопируйте код и вставьте в стандартный модуль, для удобства создайте на рабочем листе кнопку из панели «Элементы управления формы» и назначьте ей макрос «Test1». На рабочем листе заполните некоторые ячейки разными данными, нажимайте кнопку, выбирайте ячейки и смотрите возвращаемые значения.
Клик по кнопке «OK» диалога Application.InputBox в этом примере возвращает содержимое выбранной ячейки (или левой верхней ячейки выбранного диапазона), преобразованное в текстовый формат. У дат в текстовый формат преобразуется их числовое представление.
Клик по кнопке «Отмена» или по закрывающему крестику возвращает строку «False».
Пример 2 – возвращение объекта Range
В этом примере тестируем метод Application.InputBox с обязательным параметром Prompt, разделенным на две строки, параметром Title и значением параметра Type равным 8. Так как в данном случае диалог в качестве значения возвращает объект Range, он присваивается переменной с помощью оператора Set. Для этого примера создайте новую кнопку из панели «Элементы управления формы» и назначьте ей макрос «Test2».
Sub Test2() Dim a As Variant Set a = Application.InputBox(“Пожалуйста,” _ & vbNewLine & “выберите диапазон:”, _ “Наш диалог”, , , , , , 8) MsgBox a.Cells(1) MsgBox a.Address End Sub |
В первом информационном окне MsgBox выводится значение первой ячейки выбранного диапазона, во втором – адрес диапазона.
Напомню, что обращаться к ячейке в переменной диапазона «a» можно не только по порядковому номеру (индексу) самой ячейки, но и по индексу строки и столбца, на пересечении которых она находится. Например, оба выражения
указывают на первую ячейку диапазона. А в объектной переменной «a» с присвоенным диапазоном размерностью 3х3 оба выражения
указывают на центральную ячейку диапазона.
При использовании метода Application.InputBox происходит проверка введенных данных: попробуйте понажимать кнопку «OK» с пустым полем ввода и с любым введенным текстом (кроме абсолютного адреса). Реакция в этих случаях разная, но понятная.
Есть и отрицательные моменты: при использовании в диалоге Application.InputBox параметра Type со значением равным 8, нажатие кнопок «Отмена» и закрывающего крестика вызывают ошибку Type mismatch (Несоответствие типов). Попробуйте нажать кнопку «Отмена» или закрыть форму диалога.
Решить эту проблему можно, добавив обработчик ошибок. Скопируйте в стандартный модуль код следующей процедуры, создайте еще одну кнопку и назначьте ей макрос «Test3».
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Sub Test3() Dim a As Variant ‘При возникновении ошибки ‘перейти к метке “Inform” On Error GoTo Inform Set a = Application.InputBox(“Пожалуйста,” _ & vbNewLine & “Выберите диапазон:”, _ “Наш диалог”, , , , , , 8) MsgBox a.Cells(1) MsgBox a.Address ‘Выйти из процедуры, ‘если не произошла ошибка Exit Sub ‘Метка Inform: ‘Вывести информационное окно с ‘сообщением об ошибке MsgBox “Диалог закрыт или нажата кнопка ” _ & Chr(34) & “Отмена” & Chr(34) & “!” End Sub |
Попробуйте теперь нажать кнопку «Отмена» или закрыть форму диалога крестиком.
Пример 3 – возвращение массива
Скопируйте в стандартный модуль код процедуры ниже, создайте четвертую кнопку и назначьте ей макрос «Test4». В этой процедуре указан только аргумент параметра Type равным 64, остальные необязательные параметры оставлены по умолчанию.
Sub Test4() Dim a As Variant a = Application.InputBox(“Выберите диапазон:”, , , , , , , 64) MsgBox a(3, 3) End Sub |
Откройте диалоговую форму, нажав четвертую кнопку, и выберите диапазон размерностью не менее 3х3. Нажмите «OK»: информационное сообщение выведет значение соответствующего элемента массива «a», в нашем случае – «a(3, 3)». Если вы выберите диапазон по одному из измерений меньше 3, тогда строка «MsgBox a(3, 3)» вызовет ошибку, так как указанный элемент выходит за границы массива. Эта же строка по этой же причине вызовет ошибку при нажатии кнопки «Отмена» и при закрытии диалога крестиком. Если закомментировать строку «MsgBox a(3, 3)», то закрываться диалог будет без ошибок и при нажатии кнопки «Отмена», и при закрытии диалога крестиком.
Чтобы не попасть за границу массива используйте функцию UBound для определения наибольшего доступного индекса по каждому из двух измерений, например, вот так:
Sub Test5() Dim a As Variant a = Application.InputBox(“Выберите диапазон:”, , , , , , , 64) MsgBox “Максимальный индекс 1 измерения = ” & UBound(a, 1) & _ vbNewLine & “Максимальный индекс 2 измерения = ” & UBound(a, 2) End Sub |
только присваивайте значения выражений «UBound(a, 1)» и «UBound(a, 2)» числовым переменным. А этот код используйте для ознакомления с работой функции UBound и ее тестирования.
В этой процедуре ошибка выдается при выборе одной ячейки или диапазона в одной строке, очевидно, Excel воспринимает его как одномерный массив. Хотя при выборе диапазона в одном столбце, по крайней мере в Excel 2016, все проходит гладко и вторая строка информационного сообщения отображается как «Максимальный индекс 2 измерения = 1».
Ошибка выдается и при нажатии кнопки «Отмена», и при закрытии диалога крестиком, так как переменная «а» в этом случае еще не является массивом, а мы пытаемся использовать ее как аргумент для функции массива, что и вызывает ошибку.
Пример 4 – возвращение формулы
Возвращение формулы рассмотрим на следующем примере:
Sub Test6() Dim a As Variant a = Application.InputBox(“Создайте формулу:”, , , , , , , 0) Cells(1, 1) = a End Sub |
На активном листе Excel заполните некоторые ячейки числами и запустите процедуру на выполнение. После отображения диалога Application.InputBox выбирайте по одной ячейке с числами, вставляя между ними математические операторы. После нажатия на кнопку «OK» формула запишется в первую ячейку активного рабочего листа «Cells(1, 1)» (в текст формулы ее не выбирайте, чтобы не возникла циклическая ссылка). При нажатии на кнопку «Отмена» и при закрытии диалога крестиком в эту ячейку запишется слово «Ложь».
Можно записывать не только математические формулы, но и объединять содержимое ячеек с помощью оператора «&» и многое другое. Только не понятно, для чего это вообще нужно, как, впрочем, и возврат логических, числовых значений и значений ошибки. Вы можете протестировать их возврат с помощью процедуры «Test6», заменив в ней параметр Type метода Application.InputBox соответствующим для возвращения логических, числовых значений и значений ошибки.
- 12/13/2018
- Чтение занимает 2 мин
o
В этой статье
Отображает приглашение в диалоговом окне, ждет, пока пользователь введет текст или нажмет кнопку, и возвращает строку с содержимым текстового поля.Displays a prompt in a dialog box, waits for the user to input text or click a button, and returns a String containing the contents of the text box.
СинтаксисSyntax
InputBox(Prompt, [ Title ], [ Default ], [ кспос ], [ ИПОС ], [ HelpFile, context ])InputBox(prompt, [ title ], [ default ], [ xpos ], [ ypos ], [ helpfile, context ])
В синтаксисе функции InputBox представлены следующие именованные аргументы:The InputBox function syntax has these named arguments:
ЧастьPart | ОписаниеDescription |
---|---|
сообщениеprompt | Обязательный аргумент.Required. Строковое выражение, отображающееся в диалоговом окне.String expression displayed as the message in the dialog box. Максимальная длина строки аргумента сообщение составляет приблизительно 1024 знака и зависит от их ширины.The maximum length of prompt is approximately 1024 characters, depending on the width of the characters used. Если запрос состоит из нескольких строк, можно разделить строки с помощью символа возврата каретки (Chr(13)), символа перевода строки (Chr(10)) или сочетания символов возврата каретки (Chr(13) & (Chr(10)) между строками.If prompt consists of more than one line, you can separate the lines by using a carriage return character (Chr(13)), a linefeed character (Chr(10)), or carriage return-linefeed character combination ((Chr(13) & (Chr(10)) between each line. |
заголовокtitle | Необязательно.Optional. Строковое выражение, отображаемое в заголовке диалогового окна.String expression displayed in the title bar of the dialog box. Если аргумент заголовок пропущен, в заголовке выводится имя приложения.If you omit title, the application name is placed in the title bar. |
defaultdefault | Необязательно.Optional. Строковое выражение, отображаемое в текстовом поле в качестве ответа по умолчанию, если ввод вообще не будет выполнен.String expression displayed in the text box as the default response if no other input is provided. Если пропустить аргумент default, соответствующее текстовое поле отображается пустым.If you omit default, the text box is displayed empty. |
кспосxpos | Необязательно.Optional. Числовое выражение, задающее в твипах расстояние по горизонтали от левого края диалогового окна до левого края экрана.Numeric expression that specifies, in twips, the horizontal distance of the left edge of the dialog box from the left edge of the screen. Если аргумент xpos пропускается, диалоговое окно выравнивается по горизонтальной оси.If xpos is omitted, the dialog box is horizontally centered. |
ипосypos | Необязательно.Optional. Числовое выражение, задающее в твипах расстояние по вертикали от верхнего края диалогового окна до верхнего края экрана.Numeric expression that specifies, in twips, the vertical distance of the upper edge of the dialog box from the top of the screen. Если аргумент ypos пропускается, диалоговое окно позиционируется по вертикальной оси и отстоит от верхнего края окна примерно на треть от высоты экрана.If ypos is omitted, the dialog box is vertically positioned approximately one-third of the way down the screen. |
файл_справкиhelpfile | Необязательно.Optional. Строковое выражение, определяющее файл, в котором содержится контекстная справка для данного диалогового окна.String expression that identifies the Help file to use to provide context-sensitive Help for the dialog box. Если задан аргумент файл_справки, необходимо также указать аргумент контекст.If helpfile is provided, context must also be provided. |
контекстcontext | Необязательный аргумент.Optional. Числовое выражение, представляющее собой номер контекста, присвоенный автором справки соответствующему разделу.Numeric expression that is the Help context number assigned to the appropriate Help topic by the Help author. Если задан аргумент контекст, необходимо также указать аргумент файл_справки.If context is provided, helpfile must also be provided. |
Если одновременно указаны аргументы файл_справки и контекст, пользователь может нажать клавишу F1 (Windows) или HELP (Macintosh) для просмотра раздела справки, соответствующего аргументу контекст.When both helpfile and context are provided, the user can press F1 (Windows) or HELP (Macintosh) to view the Help topic corresponding to the context. Некоторые ведущие приложения, например Microsoft Excel, автоматически добавляют кнопку Справка в диалоговое окно.Some host applications, for example, Microsoft Excel, also automatically add a Help button to the dialog box. Если пользователь нажимает кнопку ОК или клавишу ВВОД, функция InputBox возвращает любой текст из текстового поля.If the user chooses OK or presses ENTER, the InputBox function returns whatever is in the text box. Если пользователь нажимает кнопку Cancel (Отмена), функция возвращает строку нулевой длины (“”).If the user chooses Cancel, the function returns a zero-length string (“”).
Примечание
Чтобы задать больше чем один первый именованный аргумент, необходимо использовать функцию InputBox в выражении.To specify more than the first named argument, you must use InputBox in an expression. Чтобы пропустить некоторые из позиционных аргументов, нужно вставить соответствующие запятые.To omit some positional arguments, you must include the corresponding comma delimiter.
ПримерExample
В этом примере показывается различные способы использования функции InputBox, чтобы пригласить пользователя ввести значение.This example shows various ways to use the InputBox function to prompt the user to enter a value. Если позиции x и y пропустить, диалоговое окно будет автоматически центрироваться относительно соответствующих осей.If the x and y positions are omitted, the dialog box is automatically centered for the respective axes. Переменная MyValue содержит значение, введенное пользователем, если пользователь нажимает кнопку ОК или нажимает клавишу ВВОД.The variable MyValue contains the value entered by the user if the user chooses OK or presses the ENTER key. Если пользователь нажимает кнопку Cancel (Отмена), возвращается строка нулевой длины.If the user chooses Cancel, a zero-length string is returned.
Dim Message, Title, Default, MyValue
Message = “Enter a value between 1 and 3” ‘ Set prompt.
Title = “InputBox Demo” ‘ Set title.
Default = “1” ‘ Set default.
‘ Display message, title, and default value.
MyValue = InputBox(Message, Title, Default)
‘ Use Helpfile and context. The Help button is added automatically.
MyValue = InputBox(Message, Title, , , , “DEMO.HLP”, 10)
‘ Display dialog box at position 100, 100.
MyValue = InputBox(Message, Title, Default, 100, 100)
См. такжеSee also
- Метод Application.InputBox (Excel)Application.InputBox method (Excel)
- Функции (Visual Basic для приложений)Functions (Visual Basic for Applications)
Поддержка и обратная связьSupport and feedback
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи?Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Подобно многим языкам программирования Visual Basic for Application (VBA) позволяет создать три типа процедур: Sub, Function, Property.
Процедура – это набор описаний и инструкций, сгруппированных для выполнения.
Процедура Sub – набор команд, с помощью которого можно решить определенную задачу. При ее запуске выполняются команды процедуры, а затем управление передается в приложение или процедуру, которая вызвала процедуру Sub. Записываемые макросы автоматически описываются как процедуры Sub, любой макрос или другой код VBA, который просто выполняет определенный набор действий, используя приложения Office, и обычно является процедурой Sub.
Процедура Function (или функция) также представляет собой набор команд, который решает определенную задачу. Различия заключается в том, что процедуры данного типа обязательно возвращают значение. При создании процедуры Function можно описать тип данных, который возвращает функция. Функции обычно используются при выполнении вычислений, операциями с текстом, либо возвращают логические значения.
Процедура Property используется для ссылки на свойство объекта. Данный тип процедур применяется для установки или получения значения пользовательских свойств форм и модулей. Процедуры облегчают хранение и применение информации, если использовать их сначала для сохранения в свойстве этой информации, а затем для ее чтения.
Структура процедуры
При записи процедуры требуется соблюдать правила ее описания. Упрощенный синтаксис для процедур Sub является следующим:
Sub имя ([аргументы])
Инструкции
End Sub
Синтаксис описания функций очень похож на синтаксис описания процедуры Sub, однако, имеются некоторые отличия:
Function имя ([аргументы]) [As Тип]
Инструкции
имя = выражение
End Function
Использование операторов
Процедуры состоят из операторов – наименьших единиц программного кода. Как правило, операторы занимают по одной строке программного кода, и в каждой строке обычно содержится только один оператор, но это не обязательно. В VBA имеется четыре типа операторов: объявления, операторы присваивания, выполняемые операторы и параметры компилятора.
Объявления
Объявление – это оператор, сообщающий компилятору VBA о намерениях по поводу использования в программе именованного объекта (переменной, константы, пользовательского типа данных или процедуры). Кроме того, объявление задает тип объекта и обеспечивает компилятору дополнительную информацию о том, как использовать данный объект. Объявив объект, можно использовать его в любом месте программы.
Переменные – это именованные значения, которые могут изменяться во время выполнения программы.
Рассмотрим пример объявления переменной.
С помощью оператора Dim объявляется переменная с именем МоеЛюбимоеЧисло и объявляется, что значение, которое она будет содержать, должно быть целым:
Dim МоеЛюбимоеЧисло As Integer
Константы представляют собой именованные значения, которые не меняются.
Оператор Constant создает строковую константу (текст) с именем НеизменныйТекст, представляющую собой набор символов Вечность:
Constant НеизменныйТекст = “Вечность”
Оператором Type объявляется пользовательский тип данных с именем Самоделкин, определяя его как структуру, включающую строковую переменную с именем Имя и переменную типа Date с именем ДеньРождения. В данном случае объявление займет несколько строк:
Type Самоделкин
Имя As String
ДеньРождения As Date
End Type
Объявление Private создает процедуру типа Sub с именем СкрытаяПроцедура, говоря о том, что эта процедура является локальной в смысле области видимости. Завершающий процедуру оператор End Sub считается частью объявления.
Private Sub СкрытаяПроцедура ()
инструкции
End Sub
Оператор присваивания
Оператор присваивания = приписывают переменным или свойствам объектов конкретные значения. Такой оператор всегда состоят из трех частей: имени переменной, или свойства, знака равенства и выражения, задающего нужное значение.
Оператор = присваивает переменной МоеЛюбимоеЧисло значение суммы переменной ДругоеЧисло и числа 12.
МоеЛюбимоеЧисло = ДругоеЧисло + 12
В следующей строке кода, записывается, что свойству Color (Цвет) объекта AGraphicShape присваивается значение Blue (Синий) в предположении, что Blue является именованной константой:
AGraphicShape.Color = Blue
В следующеей строке, чтобы задать значение переменной КвадратныйКорень, для текущего значения переменной МоеЛюбимоеЧисло вызывается функция Sqr — встроенная функция VBA вычисления квадратного корня:
КвадратныйКорень = Sqr (МоеЛюбимоеЧисло)
В VBA выражением называется любой фрагмент программного кода, задающий некоторое числовое значение, строку текста или объект. Выражение может содержать любую комбинацию чисел или символов, констант, переменных, свойств объектов, встроенных функций и процедур типа Function, связанных между собой знаками операции (например, + или *). Несколько примеров выражений:
Выражение | Значение |
3.14 | 3.14 |
Xn*5 | 10 (в предположении, что Xn = 2) |
(12 – Sqr(x))/5 | 2 (в предположении, что х = 4) |
«Розы красные,» & | Розы красные, фиалки фиолетовые |
Выполняемые операторы
Выполняемые операторы делают главную работу в программе и используются для выполнения следующих задач:
- вызов процедуры;
- активизация метода некоторого объекта;
- управление порядком, в котором должны выполняться другие операторы, посредством организации циклов или выбором участка программного кода (из нескольких альтернатив) для последующего выполнения;
- выполнение одного из встроенных операторов VBA или функции.
Пример. Оператор, вызывающий для выполнения метод Rotate объекта AGraphicShape:
AGraphicShape. Rotate(90)
Запись нескольких операторов
Как правило, каждый оператор занимает одну строку программного кода, но VBA не обязывает уместить оператор в одной строке. Если оператор слишком длинный, можно разместить его в двух или более строках, добавив в конце каждой из строк (кроме последней) символ подчеркивания (_).
Можно сделать и наоборот — разместить несколько операторов в одной строке программного кода. Например,
Dim A As Integer, В As Integer: A = 3: B = 5: A = A +B
Эта строка программного кода эквивалентна следующим четырем строкам:
Dim A As Integer, В As Integer
A = 3
B = 5
А = А + В
Самыми простыми диалоговыми окнами являются окна сообщений (message boxes) — это диалоговые окна, которые выдают пользователю сообщения и снабжаются одной или более кнопками для выбора. В VBA они создаются с использованием функции MsgBox.
В своей самой простой форме MsgBox используется как оператор с одним аргументом – сообщением, которое должно отображаться. Например, приведенный ниже макрос создаёт сообщение, показанное на рисунке.
Sub Program ()
MsgBox “Это – окно сообщений”
End Sub
MsgBox можно использовать для отображения числового значения.
Sub ShoeValue()
Amount = 10
MsgBox Amount
End Sub
Переменной Amount присваивается значение 10. На следующей строке для отображения значения Amount используется MsgBox. Вокруг Amount нет кавычек, поскольку это – значение переменной, которое нужно выдать на экран, а не слово “Amount”.
Чтобы использовать вместе две отдельные строки в одном окне сообщения, следует использовать операцию конкатенации (&) — объединение.
Sub SayGoodNight()
Name = “Саша”
MsgBox “Пожелайте доброй ночи ” & Name
End Sub
Переменной Name присваивается строка “Саша”. В строке кода с MsgBox задаётся текстовая строка “Пожелайте доброй ночи “, за которой следует & Name, указывая MsgBox присоединить значение переменной Name к предыдущей текстовой строке.
Опции MsgBox
необязательные аргументы, например, для того, чтобы вставить значок или изменить заголовок (title).
MsgBox “Это – замечательное окно сообщений”, _vbExclamation, “Персональное окно”
Существует четыре значка для окон сообщений. Каждый имеет определённое числовое значение, которое должно передаваться в качестве аргумента MsgBox. Однако вместо числа можно использовать константы со специальными именами, встроенные в VBA.
Таблица 1
Значки окна сообщений MsgBox
Отображение | Константа | Когда используется |
vbInformation | для сообщения, не требующего ответа | |
vbQuestion | для того, чтобы задать вопрос | |
vbExclamation | для выдачи важной информации | |
vbCritical | для предупреждения |
MsgBox как функция
MsgBox является функцией и может возвращать значение, соответствующее той кнопке, которую нажимает пользователь. Одной из имеющихся опций окна сообщения является изменение кнопок, которое оно отображает. Вот окно сообщений, которое появляется, когда осуществляется выход из Excel, имея не сохраненные изменения в документе. Это окно имеет три кнопки.
После выбора соответствующей кнопки Excel получает информацию о том, какую кнопку выбрали.
Общий формат для функции MsgBox:
MsgBox(prompt [, buttons] [, title])
где prompt — единственный обязательный аргумент. Для окна сообщений следует задавать текстовую строку с информацией. если вы хотите изменить заголовок, появляющийся в верхней части окна, задайте для заголовка (title) текстовую строку. По умолчанию используется заголовок Microsoft Excel.
Таблица 2 Комбинации кнопок MsgBox
Отображение | Константа | Когда используется |
vbOKOnly | Когда не требуется от пользователя принятия решения | |
vbOKCancel | Когда окно сообщений объясняет возможное действие. Позволяет пользователю сделать выбор с помощью кнопки Отмена | |
vbYesNo | Альтернатива константе vbOKCancel, когда кажется, что это сделает окно сообщений более понятным | |
vbYesNoCancel | Для таких ситуаций, как выход или закрытие файлов без сохранения (подобно ситуации, показанной на рисунке выше) | |
vbAbortRetryIgnore | При ответе на сообщения об ошибках диска или файла | |
vbRetryCancel | При ответе на сообщения об ошибках диска или файла |
Если не указывать, какие кнопки необходимо отображать в окне сообщений, то используется значение по умолчанию, соответствующее кнопке Оk.
Примеры решения задач
Приведем несколько примеров решения задач на VBA.
Пример 1. Вычислить значение выражения a равного
, при x = 3, y = 2.5
Решение.
Sub выражение1()
Dim A, x, y
x = 3
y = 2.5
A = 2 * x – 3 * y
MsgBox (A)
End Sub
Пояснение решения.
В строке Dim A, x, y объявляются переменные A, x, y.
Пример 2.
Пример 2. Вычислить значение выражения a равного
, при x = 3, y = 2.5
Замечание: значения x и y вводит пользователь.
Решение.
Sub выражение2()
Dim A, x, y As Double
x = InputBox(“Введите x=”)
y = InputBox(“Введите y=”)
A = 2 * x – 3 * y
MsgBox (A)
End Sub
Пояснение решения.
В строке Dim A, x, y As Double описываются переменные A, x, y как числа двойной точности.
При использовании строки
x = InputBox(“Введите x=”)
появиться окно
Пример 3
Пример 3. Вычислить значение выражения a равного
, при x = 3, y = 2.5
Замечание: значения x и y вводит пользователь, ответ выводится в виде «a = <значение>».
Решение.
Sub выражение3()
Dim A, x, y As Double
Dim ответ As String
x = InputBox(“Введите x=”)
y = InputBox(“Введите y=”)
A = 2 * x – 3 * y
ответ = “a=” + Str(A)
MsgBox (ответ)
End Sub
Пояснение решения.
В строке Dim ответ As String описывается переменная ответ как строковая.
Код Str(A) преобразует значение переменной A в строку.
Пример 4
Пример 4. Вычислить значения выражений при x = 3, y = 2.5
,
,
,
,
Решение.
Sub выражение4()
Dim A, b, c, d, a1, x, y As Double
x = InputBox(“Введите x=”)
y = InputBox(“Введите y=”)
A = 2 * x – 3 * y
b = (2 * x – 3 * y) / 2
c = (2 * x – 3 * y) / 2 * x
d = (2 * x – 3 * y) / (2 * x)
a1 = (2 * x – 3 * y) / (2 * x) + (5 – x) / (3 + y)
MsgBox (“a=” + Str(A))
MsgBox (“b=” + Str(b))
MsgBox (“c=” + Str(c))
MsgBox (“d=” + Str(d))
MsgBox (“a1=” + Str(a1))
End Sub
Пример 5
Пример 5. Выполнить пример 4, другим способом, с помощью вспомогательных переменных.
Решение.
Sub выражение5()
Dim A, b, c, d, a1, a2, b1, c1, c2, x, y As Double
x = InputBox(“Введите x=”)
y = InputBox(“Введите y=”)
A = 2 * x – 3 * y
b = (2 * x – 3 * y) / 2
c = (2 * x – 3 * y) / 2 * x
d = (2 * x – 3 * y) / (2 * x)
a1 = (2 * x – 3 * y) / (2 * x) + (5 – x) / (3 + y)
‘ новое решение
b1 = A / 2
c1 = b * x
c2 = b / (2 * x)
a2 = d + (5 – x) / (3 + y)
MsgBox (“a=” + Str(A))
MsgBox (“b=” + Str(b))
MsgBox (“c=” + Str(c))
MsgBox (“d=” + Str(d))
MsgBox (“a1=” + Str(a1))
MsgBox (“b1=” + Str(b1))
MsgBox (“c1=” + Str(c1))
MsgBox (“c2=” + Str(c2))
MsgBox (“a2=” + Str(a2))
End Sub
Пример 6
Пример 6. Вычислить площадь треугольника по трем известным сторонам. Например, a = 3, b = 4, c = 5.
Решение.
Sub Герон1()
Dim A, b, c, p, s As Double
A = 3
b = 4
c = 5
p = (A + b + c) / 2
s = Sqr(p * (p – A) * (p – b) * (p – c))
MsgBox (“s=” + Str(s))
End Sub
Пояснение решения.
Для решения задачи используется формула Герона.
Пример 7
Пример 7. Вычислить площадь треугольника по трем известным сторонам.
Решение.
Sub Герон2()
Dim A, b, c, p, s As Double
A = Val(InputBox(“Введите a=”))
b = Val(InputBox(“Введите b=”))
c = Val(InputBox(“Введите c=”))
p = (A + b + c) / 2
s = Sqr(p * (p – A) * (p – b) * (p – c))
MsgBox (“s=” + Str(s))
End Sub
Пояснение решения.
Код Val(InputBox(“Введите a=”)) преобразует введенное значение через InputBox в число, так как InputBox возвращает строку. Если такого преобразования не сделать, то программа правильно вычислять s не будет.
Пример 8
Пример 8. Вычислить гипотенузу прямоугольного треугольника по двум катетам.
Решение.
Sub гипотенуза()
Dim a, b, c, p, s As Double
a = Val(InputBox(“Введите a=”))
b = Val(InputBox(“Введите b=”))
c = Sqr(a ^ 2 + b ^ 2)
MsgBox (“c=” + Str(c))
End Sub