Компьютеры Windows Интернет

Ввод вывод данных применение рабочих таблиц vba. Создание собственных диалоговых окон средствами VBA. Синтаксис функции MsgBox

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

Функция InputBox предлагает пользователям ввести значения. После ввода значений, если пользователь нажимает кнопку OK или нажимает ENTER на клавиатуре, функция InputBox возвращает текст в текстовое поле. Если пользователь нажмет кнопку «Отмена», функция вернет пустую строку («»).

Синтаксис

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

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

  • Запрос - требуемый параметр. Строка, отображаемая в виде сообщения в диалоговом окне. Максимальная длина приглашения - около 1024 символов. Если сообщение распространяется более чем на одну строку, то строки могут быть разделены с использованием символа возврата каретки (Chr (13)) или символа перевода строки (Chr (10)) между каждой строкой.
  • Заголовок - необязательный параметр. Строковое выражение отображается в строке заголовка диалогового окна. Если заголовок оставлен пустым, имя приложения помещается в строку заголовка.
  • По умолчанию - необязательный параметр. Текст по умолчанию в текстовом поле, которое пользователь хотел бы отобразить.
  • XPos - необязательный параметр. Положение оси X представляет собой приблизительное расстояние от левой стороны экрана по горизонтали. Если оставить поле пустым, поле ввода будет располагаться по горизонтали.
  • YPos - необязательный параметр. Положение оси Y представляет собой приблизительное расстояние от левой стороны экрана по вертикали. Если оставить пустым, поле ввода будет вертикально центрировано.
  • Файл справки - необязательный параметр. Строковое выражение, которое идентифицирует файл справки, который будет использоваться для предоставления контекстно-зависимой справки для диалогового окна.
  • context - Необязательный параметр. Числовое выражение, которое идентифицирует номер контекста справки, присвоенный автору справки, в соответствующий раздел справки. Если контекст предоставлен, также должен быть предоставлен справочный файл.

пример

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

Function findArea() Dim Length As Double Dim Width As Double Length = InputBox("Введите длину ", "Введите число") Width = InputBox("Введите ширину", "Введите число") findArea = Length * Width End Function

Поле ввода InputBox по шагам

Шаг 1 - Чтобы выполнить то же самое, вызовите с помощью имени функции и нажмите Enter, как показано на следующем снимке экрана.

Шаг 2 - После выполнения отображается первый поле ввода (длина). Введите значение в поле ввода.

Функция 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

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

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

Общий вид данной конструкции:

If <логическое выражение> Then <список операторов> End If

<логическое выражение> - это простое или сложное условие, или логическая константа (true или folse)

Сложное условие состоит из простых условий, соединенных логическими операциями AND или OR

Например: (а=b)

Алгоритм

2)Если значение логического выражения true, то выполняется список операторов

3)Если значение логического выражения folse, то ничего не выполняется

Дополнительная ветвь условного перехода:

If <логическое выражение> Then

<список операторов1>

<список операторов2>

Алгоритм

1)Вычисляется значение логического выражения

2)Если значение логического выражения true, то выполняется список операторов 1

3)Если значение логического выражения folse, то выполняется список операторов 2

Несколько вложенных друг в друга операторов:

If <логическое выражение1> Then

<список операторов1>

ElseIf <логическое выражение2> Then

<список операторов2>

ElseIf <логическое выражениеN> Then

<список операторовN>

Алгоритм

1)Вычисляется значение логического выражения 1

2)Если значение логического выражения 1 - true, то выполняется список операторов 1

3)Если значение логического выражения 1 - folse, то выполняется список операторов 2

4)Если значение логического выражения 2 - true, то выполняется список операторов 2

5)Если значение логического выражения 2 - folse, то выполняется список операторов 3

4)Если значение логического выражения N - true, то выполняется список операторов N

5)Если значение логического выражения N - folse, то ничего не выполняется

a = inputbox("введите A")

Cells – свойство позволяющее обращаться к конкретным ячейкам рабочего листа.

Cells(i,j) – ячейка и ее координаты – номер строки и номер столбца.

Например:

Cells(1,1) – обращение к ячейке A1

Чтобы поместить значение или формулу в ячейку:

Cells(2,2)=2 – в ячейку В2 поместить значение 2.

Cells(2,2).Value =2 в ячейку В2 поместить значение 2.

Cells(3,1) = a+b - в ячейку С1 поместить формулу суммы чисел a и b.



Cells(3,2) = cells(1,1).value + cells(1,2).value – в ячейку С2 поместить формулу суммы значений из ячеек А1 и А2.

Cells(i,j) = InputBox(“”) – в ячейку будет помещаться значение, которое мы введем в окошке inputbox.

Cells(i,j).Select – выделить конкретную ячейку

Cells.Select – выделить все ячейки на рабочем листе.

Cells(i,j).Activate – сделать ячейку активной.

Чтобы вывести значение находящееся в ячейке на экран:

Cells(1,1) =3 – в ячейку A1 помещаем значение 3.

Msgbox(cells(1,1)) – значение из ячейки выводится на экран.

Cells(1,1) = к+2 – в ячейку A1 помещаем формулу к+2, где к – заданное число

Msgbox(cells(1,1)) – результат вычисленной формулы, хранящийся в ячейке A1 выводится на экран.

MsgBox() - Выводит на экран окно сообщения (Message Box), и возвращает значение, в зависимости от того, какую кнопку нажал пользователь. Может служить для вывода результатов расчета на экран в виде сообщения.

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

MsgBox (подсказка, кнопки, заголовок, файл справки, контекст)

prompt (подсказка) – выводимое на экране сообщение.

buttons (кнопки) – константа, определяющая, какие кнопки будут содержаться в данном диалоговом окне.

title (заголовок) – заголовок диалогового окна.

helpfile (файл справки) – имя справочного файла.

context (контекст) – контекст для контекстно-зависимой справки, описывается в том случае, если есть helpfile.

InputBox - функция ввода исходных данных. Выводит диалоговое окно с сообщением и поле для ввода текста пользователя.

" мы вкратце познакомились с диалоговым сообщением 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

Пропустить

Метод 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 .