Поле ввода в VBA Excel - InputBox. Синтаксис, параметры и описание. Диалоговый ввод - вывод в VBA Vba вывод сообщения на экран

  • В процессе вывода знака на экран компьютера производится обратное перекодирование, т. е. преобразование двоичного кода знака в его изображение.
  • Любая процедура состоит из трех частей: ввода, выполнения и вывода. Ввод - это информация, необходимая для выполнения процедуры; вывод - это то, что получилось в результате выполнения процедуры.

    Свойства объектов, значения ячеек и значения переменных - все это примеры ввода. Данные ввода можно получить во время выполнения процедуры от пользователя. Это называется пользовательским вводом.

    Наиболее простая форма пользовательского ввода - это щелчок на кнопке в окне сообщения. Немного сложнее - это ввод одного значения в поле ввода диалогового окна.

    4.1.1 Окно сообщения

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

    Функция MsgBox() имеет пять аргументов:

    MsgBox(Prompt:=[, Buttons:=] [, Title:=] [, HelpFile:=, Context:=])

    АргументPrompt определяет сообщение, которое появится в диалоговом окне. Наберите текст (в кавычках). Используйте переменную типа string или объединенные строковые переменные и строки со значком &, например:

    “Этот экран высотой в "& AppIication.UsableHeight &" точек"

    АргументButtons определяет, какие кнопки появятся в окне сообщения. Укажите их, используя такие константы, как vbExclamation или vbOK. Эти константы VBA представляет как числа. Хотя вместо констант можно применять числа для обозначения кнопок, однако рекомендуем использовать константы, поскольку при этом вы получите легко читаемый код. Параметры аргумента Button можно разделить на несколько групп. Две наиболее важные - это пиктограммы и кнопки. В окне сообщения вы можете поместить четыре типа пиктограмм и шесть типов кнопок. Другие параметры определяют, какая кнопка считается нажатой по умолчанию и работа какого приложения приостанавливается, когда появляется диалоговое окно, – только Excel или вообще всех приложений. В таблице 4.1 приведены эти параметры.

    Таблица 4.1 – Значения константы аргумента Button функции MsgBox

    Константа Значение Описание
    VbOKonly Выводит кнопку ОК
    VbOKCancel Выводит кнопки ОК и Отмена
    VbAbortRetryIgnore Выводит кнопки Прекратить, Повторить и Игнорировать
    VbYesNoCancel Выводит кнопки Да, Нет и Отмена
    VbYesNo Выводит кнопки Да и Нет
    VbRetryCancel Выводит кнопки Повторить и Отмена
    VbCritical Выводит пиктограмму Critical Message (Критическое сообщение)
    VbQuestion Выводит пиктограмму Question mark (Предупреждающий запрос)
    VbExclamation Выводит пиктограмму Exclamation (Предупреждение)
    VbInformation Выводит пиктограмму Information
    VbDefaultButton1 Принимает по умолчанию первую кнопку
    VbDefaultButton2 Принимает по умолчанию вторую кнопку
    VbDefaultButton3 Принимает по умолчанию третью кнопку
    VbApplicationModal Excel прекращает работу закрытия окна сообщения
    VbSystemModal Приостанавливается работа всех приложений до закрытия окна сообщения

    Для того чтобы в окне сообщения отобразилось несколько кнопок, соедините константы знаком «плюс». Нельзя вывести в окне сообщения две пиктограммы, но можно управлять как пиктограммой, так и типом появляющихся кнопок. Окно сообщения появляется всегда только в центре экрана. Если никакая другая кнопка не указана, в окне сообщения отображается только кнопка ОК.

    Аргумент Title определяет заголовок окна сообщения. Как и Prompt, этот аргумент должен быть строкой, строковой переменной или объединением строк и строковых переменных. Вы можете не указывать этого аргумента, тогда по умолчанию названием окна сообщения будет Microsoft Excel.

    Для того чтобы указать текущую справку, используйте четвертый и пятый аргумент (или проигнорируйте их). Аргумент HelpFile - имя файла справки, а аргумент Context указывает раздел в нем. Если вы указали один из этих аргументов, то должны указать и второй. При этом Excel автоматически добавит кнопку справки в окно сообщения.

    Следующий код отображает два окна сообщения: первое с заголовком - "Системн_информ" - содержит пиктограмму с восклицательным знаком и сообщение об используемой высоте экрана; второе с заголовком - "Системная информация" - содержит сообщение об используемой ширине экрана.

    Sub ShowMessageOK()

    MsgBox Prompt:=" Высота этого экрана составляет" _

    & Application.UsableHeight & " точек", Buttons:=vbExclamation, Title:="Системн_информ"

    MsgBox "Ширина этого экрана " & Application.UsableWidth & _

    " точек", vbInformation, "Системная информация"

    4.2 Принятие решения

    Очень просто вывести на экран несколько кнопок: используйте константы, указанные в таблице 3.1. Вы можете вывести окна сообщения с кнопками Да и Нет, кнопками Да, Нет и Отмена, а также кнопками Прекратить, Повторить, Игнорировать. Проанализировав в коде значение, возвращенное функцией MsgBox (таблица 4.2), можно определить, какая кнопка нажата, и направить выполнение программы по нужному пути.

    Таблица 4.2 – Значения, возвращаемые функцией MsgBox

    Константа Значение Нажатая кнопка
    VbOK ОК
    VbCansel Отмена
    VbAbort Прервать
    VbRetry Повторить
    VbIgnore Пропустить
    VbYes Да
    VbNo Нет

    Следующий пример кода выводит окно сообщения с кнопками Да и Нет. Если пользователь щелкнет на кнопке Да, то появится другое окно сообщения с надписью "Продолжаю. . . ". Если пользователь щелкнет на кнопке Нет, появится сообщение "Процесс прерван". Второй аргумент использует vbQuestion плюс vbYesNo: окно сообщения будет содержать знак вопроса и кнопки Да и Нет.

    Sub VoprosYesNo()

    Dim Indik As Integer

    Indik = MsgBox("Хотите продолжать?", vbQuestion + vbYesNo, "Вопрос пользователю")

    If Indik = vbYes Then

    MsgBox "Продолжаю. . .", vbInformation, "Системное сообщение"

    MsgBox "Процесс прерван", vbCritical, "Системное сообщение"

    В этом примере кода показаны два способа использования функции MsgBox. В первом случае круглые скобки ставятся сразу после слова MsgBox и после третьего аргумента. Это означает, что используется возвращаемое значение функции MsgBox. Следующие две функции не используют возвращаемого значения, поэтому круглые скобки не ставятся. Кнопки, расположенные в окне сообщения, определяют значение возвращаемой величины. Возвращаемое значение функции MsgBox является константой, которая начинается с vb и заканчивается словом, написанным на кнопке, например ОК или Отмена. Если в окне сообщения находятся кнопки Да и Нет, то функция MsgBox возвращает значение vbYes или vbNo.

    В данном коде переменная Indik равна результату функции MsgBox. Команда If проверяет, равняется ли значение Indik vbYes; если да, она выполняет соответствующие действия.

    4.3 Окно ввода

    Функция InputBox() немного сложнее, чем MsgBox(), и позволяет ввести реальное значение или текстовую строку. Поскольку InputBox() получает значение, её бессмысленно применять, не используя введенное значение. Поэтому эта функция всегда записывается с круглыми скобками.

    Функция InputBox() может иметь до семи аргументов:

    InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])

    Необходимым является только первый - Prompt, в котором указывается сообщение в окне. Вторым является Title.

    Третьим – значение окна ввода, принимаемое по умолчанию. Четвертый и пятый аргументы указывают положение окна ввода. Если они пропускаются, окно будет располагаться посередине экрана.

    Шестой и пятый аргументы определяют файл справки и его раздел. Если вы используете один из них, то необходимо использовать и другой. Тогда Excel добавит к окну ввода кнопку Справка.

    Функция InputBox() всегда возвращает строку. Даже если пользователь введет число – в действительности это строка. В большинстве случаев VBA переводит строку в число. Однако иногда перевод осуществляется неправильно. В таком случае нужно перевести возвращаемое значение в другой тип данных. Используйте для этого одну из функций перевода, например функцию Сint (значение), которая переводит возвращаемое значение в целое число.

    Щелкая на кнопке Отмена, вы ожидаете, что возвращаемой величиной будет vbCancel. Однако это неверно. Поскольку InputBox() возвращает строку, щелчок на кнопке Отмена приведет к тому, что будет возвращена пустая строка (набор кавычек - ""). Рассмотрите следующий пример, если ничего не введено (пустая строка), то происходит выход из подпрограммы.

    Sub Vvod_lnputBox()

    Dim s As String, sreal As Single

    s = InputBox(Prompt:="Какая зарплата?:", _

    Title:="Вопрос", Default: =550)

    If s = "" Then Exit Sub

    sreal = CSng (s)

    MsgBox "Зарплата составляет" & s & " налоги " & sreal * 0.13

    Иногда необходимо, чтобы пользователь ввел только конкретный тип данных. В этом случае используйте метод InputBox() вместо функции InputBox(). Поставив Application. перед InputBox(), вы укажете VBA, что необходимо использовать метод Excel InputBox(), а не функцию VBA. У метода InputBox() имеется еще и восьмой аргумент - Type. Указав тип, вы тем самым требуете (от пользователя) ввести только определенный тип данных. Чтобы разрешить ввод нескольких типов данных, добавьте значения различных типов данных. Однако если вы используете метод InputBox(), щелчок на кнопке Отмена возвращает значение False, а не пустую строку.

    4.4 Ввод-вывод при помощи ячеек Excel

    Для ввода исходных данных из конкретных ячеек рабочего листа Excel, а также для вывода результатов расчета в ячейки может быть эффективно применен объект ActiveCell. Объект Range используется для указания ячеек. Объект ActiveCell указывает на ячейку (или объект Range), который имеет фокус при вводе данных с клавиатуры. Для этого используется свойство Value. Например, в ячейку с адресом А5 необходимо записать значение переменной Rost:

    Range(“A5”).Select

    ActiveCell.Value = Rost

    Обратная процедура выполняется аналогично:

    Rost = ActiveCell.Value

    Если есть необходимость считывать большое число данных из различных ячеек, адреса которых можно вычислить, целесообразно использование метода Offset(R,C), где R – смещение на R строк вниз относительно строки активной ячейки, C – смещение на С столбцов вправо относительно столбца активной ячейки. Например, следующая строка записывает значение переменной Rost в ячейку В7.

    В этой статье Вы научитесь создавать окно сообщения в VBA Excel, которое может отображать различную информацию.

    Функция MsgBox отображает окно сообщения и ждет, когда пользователь нажмет кнопку, а затем действие будет выполнено на основе кнопки, нажатой пользователем.

    Синтаксис

    MsgBox(prompt[,buttons][,title][,helpfile,context])

    Параметр Описание

    • Запрос - обязательный параметр. Строка, отображаемая в виде сообщения в диалоговом окне. Максимальная длина приглашения - около 1024 символов. Если сообщение распространяется более чем на одну строку, то строки могут быть разделены с использованием символа возврата каретки (Chr (13)) или символа перевода строки (Chr (10)) между каждой строкой.
    • Кнопки - необязательный параметр. Числовое выражение, которое указывает тип отображаемых кнопок, стиль значка для использования, идентификатор кнопки по умолчанию и модальность окна сообщения. Если оставить пустым, значение по умолчанию для кнопок равно 0.
    • Заголовок - необязательный параметр. Строковое выражение отображается в строке заголовка диалогового окна. Если заголовок оставлен пустым, имя приложения помещается в строку заголовка.
    • Файл справки - необязательный параметр. Выражение String, которое идентифицирует файл справки, который будет использоваться для предоставления контекстно-зависимой справки для диалогового окна.
    • Контекст - необязательный параметр. Числовое выражение, которое идентифицирует номер контекста справки, присвоенный автору справки, в соответствующий раздел справки. Если контекст предоставлен, также должен быть предоставлен справочный файл.

    Параметр Buttons может принимать любое из следующих значений:

    • 0 vbOKOnly - отображает только кнопку OK.
    • 1 vbOKCancel - отображает кнопки «ОК» и «Отмена».
    • 2 vbAbortRetryIgnore - отображает кнопки отмены, повтора и игнорирования.
    • 3 vbYesNoCancel - отображает кнопки «Да», «Нет» и «Отмена».
    • 4 vbYesNo - отображает кнопки «Да» и «Нет».
    • 5 vbRetryCancel - отображает кнопки повтора и отмены.
    • 16 vbCritical - отображает значок критического сообщения.
    • 32 vbQuestion - отображает значок предупреждения.
    • 48 vbExclamation - отображает значок предупреждающего сообщения.
    • 64 vbИнформация. Отображает значок информационного сообщения.
    • 0 vbDefaultButton1 - первая кнопка по умолчанию.
    • 256 vbDefaultButton2 - вторая кнопка по умолчанию.
    • 512 vbDefaultButton3 - Третья кнопка по умолчанию.
    • 768 vbDefaultButton4 - Четвертая кнопка по умолчанию.
    • 0 vbApplicationModal Application modal - текущее приложение не будет работать, пока пользователь не ответит на сообщение.
    • 4096 vbSystemModal System modal - все приложения не будут работать, пока пользователь не ответит на сообщение.

    Вышеуказанные значения логически разделены на четыре группы: первая группа (от 0 до 5) указывает кнопки, которые будут отображаться в окне сообщения. Вторая группа (16, 32, 48, 64) описывает стиль значка, который будет отображаться, в третью группу (0, 256, 512, 768) указывает на то, какая кнопка должна быть по умолчанию, а четвертую группу (0, 4096) определяет модальность окна сообщения.

    Возвращаемые значения

    Функция MsgBox может возвращать одно из следующих значений, которое может использоваться для идентификации кнопки, которую пользователь нажал в окне сообщения.

    • 1 - нажата кнопка vbOK - OK.
    • 2 - vbCancel - нажата кнопка Отмена
    • 3 - vbAbort - нажата кнопка Abort
    • 4 - vbRetry - нажата кнопка Retry
    • 5 - vbIgnore - нажата кнопка Ignore
    • 6 - vbYes - нажата кнопка «Да»
    • 7 - vbNo - Нет щелчка

    Sub MessageBox_Demo() "Простое сообщение MsgBox ("Привет") "Сообщение с заголовком и кнопками да, нет и отмена a = MsgBox("Вам нравится синий цвет", 3, "Выберите ответ") "Код нажатой кнопки MsgBox ("Значение ответа " & a) End Sub

    MsgBox по шагам

    Шаг 1 - Вышеуказанная функция может быть выполнена либо нажатием кнопки «Выполнить» в окне VBA, либо нажатием на кнопку, которую Вы сами добавили на лист Excel.

    Шаг 2 - Простой текстовый ящик отображается с сообщением «Добро пожаловать» и кнопкой «ОК»

    Осуществляется с помощью встроенных функций InputBox, MsgBox, с помощью изменения определенных свойств определенных объектов или применения к ним соответствующих методов.

    Ввод данных

    Ввод значений переменных может осуществляться:

      С помощью функции InputBox , которая при выполнении программы выводит на экран свое собственное окно. Возвращаемое функциейInputBoxзначение имеет типstring. Поэтому для использования введенного значения как числовой переменной необходимо дополнительно преобразовать его к числовому типу с помощью функцииVal. Например, для ввода значения числа 5,25 в переменнуюанеобходимо записать следующую строку программного кода:

    a = Val(InputBox("Введите а", "Ввод данных"))

    2) С помощью текстового окна TextBox . На форме должно присутствовать текстовое окно, к примеру,Text1, а в событийной процедуре, например, для щелчка по командной кнопке, должен быть записан программный код, в котором используется свойствоtextобъектаText1:

    Private Sub Command1_Click()

    a = Val(Text1.text)

    Свойство textобъектаText1, также имеет строковое значение, поэтому необходимо его преобразование в числовое значение с помощью функцииVal.

    Вывод результатов

    Для вывода результатов в VB существуют различные способы.

      Основным оператором вывода значений переменных в языке VB является оператор Print, который в терминах объектно-ориентированного программирования рассматривается какметод , действующий на объект, на который и будут выводиться значения, указанные в списке. Основными объектами, для которых имеется методPrint, являются формаForm, и графическое окноPictureBox.

    Если объект, к которому применяется метод Print, не указан, то список значений выводится на активную форму. Например, после выполнения строки программного кода:

      Вывести значение переменной можно с помощью функции MsgBox, которая при выполнении активизирует свое собственное окно сообщений на экране.

    Private Sub Command1_Click()

      Вывод можно оформить в текстовое окно TextBox, изменяя его свойствоText

    Text1.text=str(a)

    При этом надо помнить, что свойство Textработает со строкой символов, поэтому выводимое число преобразуется в строку символов с помощью функцииstr.

      Вывод можно оформить на метку Label, изменяя ее свойствоCaption:

    Label1.Caption=”Результат” & str(a)

    Значок & (+) означает сцепление двух строковых переменных.

    Функция Format

    При выводе результатов для большей наглядности часто используется функция Format, которая возвращает значение типаVariant (String),содержащее выражение, отформатированное согласно инструкциям, заданным в описании формата.

    Синтаксис

    Format (Expression[, Format[, FirstDayOfWeek[, FirstWeekOfYear]]])

    Expression- обязательный аргумент - любое допустимое выражение, подлежащее форматированию.

    Format - необязательный аргумент - любое допустимое именованное или определяемое пользователем выражение формата (шаблон формата).

    При форматировании чисел без указания шаблона формата функция Format выдает тот же результат, что и функцияStr, т.е. возвращает строку, представляющую число. Отличие состоит в том, что при преобразовании положительного числа с помощью функцииFormatпробел в начале строки (на месте знака числа) теряется, а при преобразовании с помощью функцииStr останется

    Примеры шаблонов форматов, применяемых для создания пользовательских форматов числовых величин

    Print Format (6.789, "00.0000") " возвратит 06,7890

    Print Format (6.789, "##.0000") " возвратит 6,7890

    Функция MsgBox позволяет выводить информацию на экран в виде окна.

    Общий вид функций:

    MsgBox сообщение

    [,код кнопки [,заголовок]]

    сообщение – определяет значение выражения, которое будет выводиться в окне сообщения. Это выражение может быть текстом, который нужно взять в кавычки, и (или) переменной. Для вывода в одном окне текста сообщений и значения переменной, следует использовать операцию объединение строк (&).

    Dim Pi As Single

    MsgBox " pi=" & Pi

    Результат работы макроса:

    код кнопки – определяет какие кнопки и пиктограммы будут выводиться в окне сообщений. Если этот параметр не указан, в окне сообщения находится только кнопка Ок .

    заголовок - содержит текст, который отображается в строке заголовка сообщения. Если этот аргумент не задан, в заголовок помещается строка Microsoft Excel .

    Dim Pi As Single

    MsgBox Pi,"Это число Pi"

    Ввод информации в VBA можно осуществить с помощью окна ввода:

    Функция InputBox создает окно ввода:

    InputBox(сообщение

    [,заголовок[,значе-ние]])

    сообщение– строка символов или строковая переменная, содержащая текстовое сообщение пользователю;

    заголовок – текст, который отображается в строке заголовка сообщения;

    значение – определяет значения, отображаемые по умолчанию в текстовом поле диалогового окна.

    ЗАДАЧА 2. Угол задан в радианах. Выполнить перевод в градусную меру.

    Const pi = 3.14159

    Dim g As Integer

    Dim m As Integer

    Dim s As Integer

    r = InputBox("r=", "Величина угла в радианах", pi / 4)

    g = Fix(r * 180 / pi)

    m = Fix((r*180/pi-g)*60)

    s=Fix(((r*180/pi-g)*60-m)*60)

    MsgBox g & " градусов" & m & " минут" & s & " секунд"

    18. Условный оператор

    Условные операторы применяются, когда в зависимости от некоторого условия необходимо выполнить либо одно, либо другое действие.

    Условный оператор, соответствующий приведенной блок-схеме, имеет вид:

    If выражение Then

    оператор1

    оператор2

    В данной конструкции выражение должно иметь логический тип.

    Работает оператор так. Вычисляется значение выражения. Если оно имеет значение true, выполняется оператор1, в противном случае (выражение имеет значение false) – оператор2.

    Если в зависимости от условия выполняется некоторое действие, а в противном случае ничего не происходит, то алгоритм имеет вид:

    Условный оператор в этом случае имет конструкцию:

    If выражение Then

    оператор

    Эту запись можно назвать «пропуск оператора else».

    Здесь оператор либо выполняется, либо пропускается, в зависимости от значения выражения.

    Допускаются многократно вложенные операторы If...Then...Else, имеющие столько уровней вложения, сколько потребуется.

    If выражение1 Then

    операторы1

    Elseif выражение2 then

    операторы2

    Elseif выражение3 then

    операторы3

    Elseif выражениеN then

    операторыN

    операторы

    Для облегчения чтения программы вместо многократно вложенных операторов, иногда предпочтительнее использовать оператор Select Case

    Select Case <выражение >

    Case <условие выбора 1 >

    <операторы 1 >

    Case <условие выбора 2 >

    <операторы 2 >

    ……………..

    Case <условие выбора N >

    <операторы N >

    <операторы >

    19. Примеры программ

    ЗАДАЧА 3. Известны коэффициенты а, b и с квадратного уравнения ax 2 +bx +c =0. Вычислить корни квадратного уравнения.

    Входные данные: a, b, c.

    Выходные данные: х 1 , х 2 .

    Sub prim7()

    Dim x1 As Single

    Dim x2 As Single

    InputBox("A=","Коэффициенты квадратного уравнения", 2)

    InputBox("B="," Коэффициенты квадратного уравнения", 3)

    InputBox("C="," Коэффициенты квадратного уравнения",-2)

    d = b ^ 2 - 4 * a * c

    If d < 0 Then

    MsgBox "Действительных решений нет", vbCritical

    x1=(-b+Sqr(d))/(2*a)

    x2=(-b-Sqr(d))/(2*a)

    MsgBox "X1=" & x1 & Chr(13) & "X2=" & x2, vbInformation

    ЗАДАЧА 4. Дано вещественное число x . Для функции, график которой приведен ниже вычислить y =f (x ).

    If x <= -1 Then

    ElseIf x > 1 Then

    ЗАДАЧА 5. Даны вещественные числа x и y . Определить принадлежит ли точка с координатами (x ; y ) заштрихованной части плоскости.

    Точка с координатами (x ;y ) принадлежит заштрихованной части плоскости, если:

    If y <= 2 * x + 2 And

    " мы вкратце познакомились с диалоговым сообщением msgbox. Но это было простейшее информационное сообщение. Теперь рассмотрим подробнее работу с функцией MsgBox и все виды диалоговых сообщений.

    Синтаксис функции MsgBox

    Функция MsgBox имеет следующий синтаксис:

    MsgBox (сообщение [, константы сообщения] [, заголовок] [, файл справки hlp, контекст справки])

    Обязательным параметром является «Сообщение», остальные могут быть опущены.

    MsgBox “Текст сообщения

    • Константы сообщения - позволяют определить вид диалогов.
    • Заголовок – задает заголовок формы диалога.
    • Файл справки hlp - строковое выражение, указывающее имя файла справки для диалогового окна.
    • Контекст справки - числовое выражение, указывающее номер контекста файла справки для диалогового окна.

    Диалоговое окно вида:

    создается следующей командой:
    MsgBox "Текст содержащий вопрос", vbYesNo, "Название сообщения"

    Для создания сообщения такого вида:

    команда будет выглядеть так:
    MsgBox "Текст содержащий вопрос", vbYesNoCancel, "Название сообщения"

    Сообщение такого вида:

    создается командой:
    MsgBox "Текст содержащий вопрос", vbAbortRetryIgnore, "Название сообщения"

    т.е. из всех трех примеров в команде меняется только второй параметр (vbYesNo, vbYesNoCancel, vbAbortRetryIgnore). Это и есть значения (константы) определяющие вид сообщения. Параметры (vbYesNo, vbYesNoCancel) могут быть заменены на числовое значение, например диалог vbYesNo можно вызвать, указав 4: MsgBox "Текст содержащий вопрос", 4, "Название сообщения".

    Ниже приведен полный список констант и эквивалентных им цифровых значений:

    Константа

    Значение

    Описание

    vbOKOnly

    Выводит сообщение с кнопкой OK

    vbOKCancel

    Выводит сообщение с кнопками OK и Отмена

    vbAbortRetryIgnore

    Выводит сообщение с кнопками Прервать , Повтор, Пропустить

    vbYesNoCancel

    Выводит сообщение с кнопками Да , Нет , Отмена .

    Выводит сообщение с кнопками Да и Нет

    vbRetryCancel

    Выводит сообщение с кнопками Повтор и Отмена

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

    Например: MsgBox "Текст содержащий вопрос", vbYesNoCancel+vbInformation+ vbMsgBoxHelpButton+vbDefaultButton2, "Название сообщения" построит сообщение вида:

    vbInformation - добавляет иконку восклицания в сообщение
    vbMsgBoxHelpButton - добавляет кнопку "Справка"
    vbDefaultButton2 - устанавливает фокус на второй кнопке ("Нет ")

    Ниже таблица со списком констант иконок и констант, устанавливающих фокус на кнопках:

    Константа

    Значение

    Описание

    vbCritical

    Выводит иконку критического сообщения (красный овал с крестом)

    vbQuestion

    Выводит иконку с вопросительным знаком

    vbExclamation

    Выводит иконку с восклицательным знаком (в желтом треугольнике)

    vbInformation

    Выводит иконку информационного сообщения

    vbDefaultButton1

    Устанавливает фокус по умолчанию на первой кнопке

    vbDefaultButton2

    Устанавливает фокус по умолчанию на второй кнопке

    vbDefaultButton3

    Устанавливает фокус по умолчанию на третьей кнопке

    vbDefaultButton4

    Устанавливает фокус по умолчанию на четвертой кнопке

    vbMsgBoxHelpButton

    Добавляет кнопку Справка

    vbMsgBoxRight

    Выравнивание текста сообщения по правой стороне

    vbMsgBoxRtlReading

    Зеркально переворачивает все элементы в сообщении (см. снимок ниже)

    Как узнать какую кнопку в сообщении нажал пользователь?

    Определяться выбор пользователя будет с помощью . В некоторых ситуациях можно использовать .

    Например, вызовем сообщение двойным нажатием ЛКМ по любой ячейке на листе. В соответствии с выбором пользователя, выведем в эту ячейку текст.

    Создаем новую книгу Excel и переходим в режим Visual Basic (Alt+F11). В окне проекта выбираем «Лист1 » и кликаем по нему два раза ЛКМ.

    В открывшемся окне редактора кода вводим следующую процедуру:

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean )

    If MsgBox("Текст содержащий вопрос", vbYesNo, "Название сообщения") = vbYes Then
    Selection = "Нажата ДА"
    Else
    Selection = "Нажата Нет"
    End If

    В условии IF мы сравниваем результат возвращенный функцией MsgBox, с константой vbYes т.е. если в сообщении нажата кнопка «Да », тогда функция MsgBox возвращает значение vbYes (6). Полный перечень констант и их цифровых эквивалентов ниже. Теперь попробуйте на Листе 1 кликнуть два раза по любой ячейке.

    Примечание: При вызове сообщения выполнение программы останавливается до тех пор, пока не будет получен ответ от пользователя.

    Второй вариант вызова диалога с помощью .

    Создадим вторую процедуру на Листе 2. Код процедуры следующий:

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean )
    Dim mes
    mes = MsgBox("Текст содержащий вопрос", vbYesNoCancel + vbInformation + vbDefaultButton2, "Название сообщения")

    Select Case mes
    Case vbYes: Selection = "Нажата ДА"
    Case vbNo: Selection = "Нажата НЕТ"
    Case vbCancel: Selection = "Нажата Отмена"
    End Select

    В этом случае результат вызова MsgBox присваивается переменной mes и далее в Select Case ищется совпадение и согласно совпадения, выполняются действия.

    Вот и все. Ниже прикреплен готовый пример, рассмотренный в этой статье.

    Перечень констант и значений, возвращаемых функцией MsgBox:

    Константа

    Значение

    Кнопка

    vbCancel

    Отмена

    Прервать

    Повтор

    vbIgnore

    Пропустить