Оргтехника        06.02.2022   

Vba ввод данных с клавиатуры. Окно сообщения в VBA Excel - MsgBox

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

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

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

    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.

    Подобно многим языкам программирования 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, связанных между собой знаками операции (например, + или *). Несколько примеров выражений:

    Выполняемые операторы

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

    • вызов процедуры;
    • активизация метода некоторого объекта;
    • управление порядком, в котором должны выполняться другие операторы, посредством организации циклов или выбором участка программного кода (из нескольких альтернатив) для последующего выполнения;
    • выполнение одного из встроенных операторов 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

    Отображение

    Константа

    Когда используется

    для сообщения, не требующего ответа

    для того, чтобы задать вопрос

    для выдачи важной информации

    для предупреждения

    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

    В этой статье Вы научитесь создавать окно сообщения в 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 - Простой текстовый ящик отображается с сообщением «Добро пожаловать» и кнопкой «ОК»

    Использование функции MsgBox в VBA Excel, ее синтаксис и параметры. Значения, возвращаемые функцией MsgBox. Примеры использования.

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

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

    MsgBox (Prompt [, Buttons ] [, Title ])

    Обязательным параметром функции MsgBox является Prompt , если Buttons иTitle явно не указаны, используются их значения по умолчанию. Кроме того, если необязательные параметры не указаны и возвращаемое значение не присваивается переменной, сообщение не заключается в скобки:

    Пример 1

    Sub Test1() MsgBox "Очень важное сообщение!" End Sub

    Параметры функции

    *Максимальная длина параметра Prompt составляет примерно 1024 знака и зависит от их ширины.

    **В Excel по умолчанию в заголовке MsgBox выводится надпись «Microsoft Excel».

    Константы параметра «Buttons»

    Тип и количество кнопок

    Константа Описание Значение
    vbOKOnly Отображается только кнопка OK. 0
    vbOKCancel Отображаются кнопки OK и Cancel (Отмена). 1
    vbAbortRetryIgnore Отображаются кнопки Abort (Прервать), Retry (Повторить) и Ignore (Пропустить). 2
    vbYesNoCancel Отображаются кнопки Yes (Да), No (Нет) и Cancel (Отмена). 3
    vbYesNo Отображаются кнопки Yes (Да) и No (Нет). 4
    vbRetryCancel Отображаются кнопки Retry (Повторить) и Cancel (Отмена). 5

    Стиль значка

    Константа Описание Значение
    vbCritical Отображается значок Critical - Критичное сообщение, сообщение об ошибке. 16
    vbQuestion Отображается значок Question - Сообщение с вопросом. 32
    vbExclamation Отображается значок Exclamation - Предупреждающее сообщение. 48
    vbInformation Отображается значок Information - Информационное сообщение. 64

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

    Пример 2

    Sub Test2() Dim a As Integer a = MsgBox("Критичное сообщение, сообщение об ошибке", 16) a = MsgBox("Сообщение с вопросом", 32) a = MsgBox("Предупреждающее сообщение", 48) a = MsgBox("Информационное сообщение", 64) End Sub

    Кнопка по умолчанию

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

    Константа Кнопка Значение
    vbOK OK 1
    vbCancel Отмена 2
    vbAbort Прервать 3
    vbRetry Повторить 4
    vbIgnore Пропустить 5
    vbYes Да 6
    vbNo Нет 7

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

    Для третьего примера зададим следующие параметры первой функции MsgBox:

    • Prompt = «Выберите кнопку!»
    • Buttons = 323 (3 (vbYesNoCancel) + 64 (vbInformation) + 256 (vbDefaultButton2))
    • Title = «Выбор кнопки»

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

    Пример 3

    Sub Test3() Dim a As Integer a = MsgBox("Выберите кнопку!", 323, "Выбор кнопки") If a = 6 Then MsgBox "Вы нажали кнопку: Да" ElseIf a = 7 Then MsgBox "Вы нажали кнопку: Нет" Else MsgBox "Вы нажали кнопку: Отмена" End If End Sub

    В этом примере, в зависимости от нажатой кнопки в первом диалоговом окне, во втором сообщении выводится название нажатой кнопки. Обратите внимание, что вторая кнопка в открывшемся первом окне MsgBox выделена по умолчанию и срабатывает при нажатии клавиши «Enter».

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

    Метод Cells делает указанную ячейку активной. Синтаксис метода следующий:

    Cells[(N строки, N столбца)]

    N строки - номер строки текущего листа Excel,

    N столбца – номер столбца текущего листа Excel (при обращении к этому методу столбцы нумеруются).

    В данном варианте синтаксиса предполагается, что на активном листе Excel ячейка, находящаяся на пересечении N строки и N столбца, становится активной.

    С помощью метода Cells можно сделать активной ячейку, чтобы затем вводить или выводить данные.

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

    Структура ввода , с использованием метода Cells следующая:

    < имя >=Cells (),

    < имя > - простая переменная или элемент массива.

    Структура вывода с использованием метода Cells следующая:

    Cells()= < выражение >,

    < выражение > - любое выводимое значение.

    Рассмотрим, пример следующей программы:

    Sub ввод_ввывод_Cells()

    Cells(5, 1) = "c="

    До запуска этого макроса рабочий лист Excel имел вид (см. рис. 13):

    А после запуска макроса он выглядит так (см. рис. 14):

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

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

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

    Синтаксис условного оператора:

    Короткая форма Þ If <условие> Then <оператор>

    If < условие > Then

    < оператор > /< Группа операторов 1 >

    Полная форма ÞIf < условие > Then

    < оператор 1 > / < Группа операторов 1 >

    < оператор 2> < Группа операторов 2 >

    В блок схеме условный оператор изображается так:

    Обычно условие является простым сравнением, но оно может быть любым выражением с вычисляемым значением. Это значение интерпретируется как False (Ложь), если оно нулевое, а любое ненулевое рассматривается как True (Истина). Если условие истинно, то выполняются все выражения, стоящие после ключевого слова Then . Если условие ложно, то выполняются все выражения, стоящие после ключевого слова Else .

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

    Рассмотри еще одну управляющую структуру - оператор безусловного перехода . Его синтаксис:

    GoTo метка ,

    где метка это любая комбинация символов.

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

    Управляющие структуры VBA. Операторы цикла.

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

    Рассмотрим операторы цикла VBA. Цикл с известным числом повторений (цикл с параметром) реализован в VBA с помощью оператора For Next следующей структуры:

    For <параметр цикла>= <начальное значение> To <конечное значение>

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

    Next <параметр цикла>

    <параметр цикла> – имя (идентификатор) параметра цикла;

    <начальное значение> – начальное значение параметра цикла;

    <конечное значение> – конечное значение параметра цикла;

    <шаг> – шаг изменения параметра цикла (необязательный параметр, если он отсутствует, шаг изменения равен 1);

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

    В блок-схеме этот оператор изображается так:

    В теле этого цикла можно использовать оператор Exit For , с помощью которого можно завершить цикл For Next до того, как параметр примет свое конечное значение.

    Циклы с неизвестным числом повторений реализуются на VBA с помощью операторов Do While … Loop, Do Until … Loop, Do … Loop While, Do … Loop Until .

    Рассмотрим структуру оператора Do While … Loop.

    Do While <условие>

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

    Здесь <условие> – логическое выражение;

    <операторы VBA> - операторы VBA, реализующие тело цикла.

    <условие>, если <условие> принимает значение Истина(True), то выполняются операторы до служебного слова Loop. Затем вновь проверяется условие, и так продолжается до тех пор, пока условие не станет ложным(False).

    Рассмотрим структуру оператора Do Until … Loop.

    Do Until <условие>

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

    Оператор выполняется следующим образом. Проверяется <условие>, если <условие> принимает значение Ложь(False), то выполняются операторы до служебного слова Loop. Затем вновь проверяется условие, и так продолжается до тех пор, пока условие не станет истинным (True).

    В блок схеме этот оператор изображается так:

    Мы рассмотрели операторы цикла, которые реализуют цикл с предусловием.

    Рассмотрим, операторы цикла, которые реализуют цикл с постусловием. Это операторы Do … Loop While и Do … Loop Until. Структура этих операторов следующая:

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

    Loop Until <условие>

    <условие>, если <условие> принимает значение Ложь(False), то опять выполняются операторы до служебного слова Loop. Так продолжается до тех пор, пока <условие> не станет истинным (True).

    В блок схеме этот оператор изображается так:

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

    Loop While <условие>

    Оператор выполняется следующим образом. Выполняются операторы до служебного слова Loop. Затем проверяется <условие>, если <условие> принимает значение Истина(True), то опять выполняются операторы до служебного слова Loop. Так продолжается до тех пор, пока <условие> не станет ложным (False).

    В блок схеме этот оператор изображается так:

    В VBA существует оператор, позволяющий осуществить досрочный выход из циклов с неизвестным числом повторений. Для выхода из этих циклов нужно использовать оператор Exit Do .