Организация ввода-вывода
Ввод и вывод данных в VBA может выполняться несколькими способами: с листа Excel, с помощью диалоговых окон, с помощью пользовательской формы.
Для ввода данных с листа или вывода на лист используется объект Worksheets и его методы Range или Cells.
Метод Range использует в качестве аргументов одну или две ссылки на ячейки и возвращают объект Range. Ссылки на ячейки должны быть оформлены в стиле А1 (колонкастрока). Ссылка на единичную ячейку, использованная в качестве аргумента, возвращает объект Range для единичной ячейки. Две ссылки на единичные ячейки возвращают объект Range для прямоугольной области, заключенной между этими двумя ячейками:
X = Worksheets(“Лист1”).Range(“B1”).Value | Присваиваем переменной Х значение ячейки B1 листа Лист1. |
Worksheets(“Лист1”).Range(“B1”).Value = Х | Выводим в ячейку B1 листа Лист1 значение переменной Х |
Worksheets(“Лист1”).Range(“C1”,”D6”).Value = 2 | Выводим в ячейки C1 и D6 листа Лист1 число 2 |
Worksheets(“Лист1”).Range(“В7:С9”).Value = 3 | Выводим в диапазон ячеек “В7:С9” листа Лист1 число 3 |
Метод Cells, получая в качестве аргументов два целых числа, возвращает объект, содержащий единичную ячейку. Аргументы определяют номера строки и столбца выбранной ячейки.
A=Worksheets(1).Cells(1,2).Value | Переменной А присвоено значение из ячейки первой строки и второго столбца первого листа. |
Worksheets(1).Cells(2,2).Value= Х | В ячейку второй строки и второго столбца заносится значение переменной Х |
? Запишите команду (2 способа), с помощью которой можно вывести слово “Задача” в ячейку Е10 листа “Пример”.
______________________________
______________________________
? Запишите команду (2 способа), с помощью которой вводится значение переменной t с листа “Задача” из ячейки F2.
______________________________
______________________________
Для ввода данных с клавиатуры используется окно ввода InputBox (таблица 9), а для вывода информации на экран – окно сообщений MsgBox(таблица 10).
Таблица 9 – Параметры функции InputBox
Функция InputBox | Выводит на экран диалоговое окно, содержащее сообщение, поле ввода и две кнопки OK и Cancel. Устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает значение типа string по нажатию кнопки OK, содержащее текст, введенный в поле. При нажатии кнопки Cancel возвращает пустую строку. Синтаксис: InputBox(prompt[, title] [, default]) - prompt — строковое выражение, отображаемое как сообщение в диалоговом окне. Строковое значение prompt может содержать несколько строк. Для разделения строк допускается использование символа возврата каретки (chr (13)), символа перевода строки (chr(10)) или комбинацию этих символов (chr( 13) & Chr (10)); - title — строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения; - default — строковое выражение, отображаемое в поле ввода как используемое по умолчанию, если пользователь не введет другую строку. Если этот аргумент опущен, поле ввода изображается пустым. |
Пример.
Имя =InputBox(“Введите Ваше имя”, “Пример окна ввода”)
На экране появится окно.
Рисунок 2 – Пример окна ввода
Переменной Имя будет присвоено значение типа String, введенное пользователем.
Следует учесть, что, поскольку введенные пользователем данные считаются текстом, при вводе числовых значений необходимо преобразовать их к одному из числовых типов данных с помощью функции преобразования типа, например val или CDbl.
X=CDbl(InputBox(“Введите значение Х”, “Пример окна ввода”, “1,678”))
В результате выполнения этой операции на экране появится окно ввода.
Рисунок 3 – Пример окна ввода
Введенное пользователем значение будет преобразовано к типу Double и присвоено переменной Х. Если пользователь не будет вводить значение, а просто нажмет кнопку OK, переменной Х будет присвоено значение по умолчанию – 1.678.
? Запишите команду, позволяющую ввести целочисленное значение переменной a через окно ввода, представленного на рисунке 4:
Рисунок 4 – Пример окна ввода
____
? Схематически изобразите вид окна ввода, появляющееся после выполнения следующей команды: к= CInt(InputBox(“Укажите значение переменной е”, “Введите переменную е”, “5.12”))
? Укажите, какое значение примет переменная к, если была нажата кнопка ОК.____________
Таблица 10 - Параметры функции/процедуры MsgBox
Процедура/ функция MsgBox | Выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа integer, указывающее, какая кнопка была нажата. Синтаксис: MsgBox(prompt[, buttons] [, title]) Аргументы: prompt — строковое выражение, отображаемое как сообщение в диалоговом окне; buttons — числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения. Значение по умолчанию этого аргумента равняется 0. Значения констант, определяющих число и тип кнопок используемого значка, приведены в таблицах 11—12; title — строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот аргумент опущен, в строку заголовка помещается имя приложения |
Значения параметра Buttons процедуры/функции MsgBox, определяющие отображаемые в диалоговом окне кнопки, приведены в таблице 11:
Таблица 11
Константа | Значение | Отображаются кнопки |
VbOKOnly | OK | |
VbOKCancel | OK, Отмена | |
VbAbortRetryIgnore | Стоп, Повтор, Пропустить | |
VbYesNoCancel | Да, Нет, Отмена | |
VbYesNo | Да, Нет | |
VbRetryCancel | Повтор, Отмена |
При написании программ с откликом, когда нужно знать, какая кнопка диалогового окна была нажата (таблица 12), вместо возвращаемых значений удобнее использовать следующие константы VBA, которые делают код программы более читаемым и, к тому же, их легко запомнить.
Таблица 12
Константа | Значение | Нажатая кнопка |
VbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo | ОК Отмена (Cancel) Прервать (Abort) Повторить (Retry) Пропустить (Ignore) Да (Yes) Нет (No) |
Пример.
N = MsgBox (“Значение переменной Х=” & X & Chr(10) & “Продолжить вычисления?”, VbYesNo, “Пример окна MsgBox”)
Если к моменту выполнения данного оператора переменная Х равнялась числу 2,14587895, то на экране появится следующее окно
Рисунок 5 – Пример окна сообщений
Пользователь может нажать одну из кнопок – Да или Нет. Если будет нажата кнопка Да, переменной N будет присвоено значение 6 , если будет нажата кнопка Нет – 7. Проанализировав в дальнейшем это значение, можно выбрать одну из ветвей выполнения программы.
Часто процедура MsgBox используется в «минимальном» варианте - только для вывода сообщения, с одной кнопкой – OK. В этом случае аргументы не берутся в скобки. Например:
MsgBox “Значение переменной Х=” & X
Рисунок 6 – Пример окна сообщений
? Запишите процедуру, позволяющую вывести значение переменной у (к моменту вывода значения переменной у равнялось 1,27) с помощью окна вывода следующего вида:
Рисунок 7 – Пример окна сообщений
Ответ:____________________
2 Операторы
2.1 Оператор присваивания (=)
Оператор присваивания позволяет задать (присвоить) переменной значение выражения, другой переменной или объекта.
Синтаксис: <переменная> =<выражение>
Порядок выполнения: вычисляется значение <выражения> и присваивается полученное значение <переменной> (вычисляется значение выражения, стоящего справа от знака присваивания, и присваивается переменной, стоящей слева от знака присваивания).
Изображение в блок – схеме:
? Какое значение примет переменная Х в результате выполнения последовательности следующих операторов:
x=5
y=4
x=x+3
x=x+y
Ответ:___________________
Пример: вычислить значение функции f(x,y)=|x|+sin2(y+5).
Public Sub prog1() Dim x As Double, y As Double Dim f As Double x=CDbl(InputBox("Введите х")) y=CDbl(InputBox("Введите y")) f = Abs(x) + Sin(y + 5) ^ 2 MsgBox "Результат = " & f End Sub | Заголовок процедуры prog1 (начало программы) Описание переменных: переменные x,y,f вещественного типа (Double) Ввод значений х и у. Функция InputBox выводит на экран окно с полем ввода и сообщением «Введите х» и возвращает значение типа строка (String). Для преобразования вводимого значения к вещественному типу – Double- используется функция CDbl. Вычисление значения переменной f: функция Abs(аргумент) возвращает модуль аргумента, Sin(аргумент) – синус аргумента, ^ - степень числа. Функция MsgBox выводит на экран окно сообщений с текстом «Результат = 12» (если f=12). Конец программы. |
Рисунок 6 - Блок-схема программы prog1
Ñ Составьте программу для вычисления площади прямоугольного треугольника, заданного длинами катетов.
2.2 Условный оператор (If…Then…Else…End If)
Условный оператор позволяет выбирать и выполнять действия в зависимости от истинности некоторого условия.
Синтаксис: условный оператор имеет два варианта синтаксиса.
a) однострочная форма записи условного оператора:
If <условие>Then[<операторы 1>][Else [<операторы 2>]]
б)блочная форма записи условного оператора:
If <условие 1>Then
[<операторы 1>]
. . .
[ElseIf<условие n>Then
[<операторы n> ]…
[Else]
[<ИначеОператоры>]]
End If
Порядок выполнения: вычисляется значение <условие>. Оно может принимать значения TRUE (Истина)или FALSE (Ложь). Если <условие> принимает значение TRUE, то выполняются [<операторы 1>], в противном случае, т.е. значение <условие> FALSE, [<операторы 2>] (операторы ветки Else).
Изображение в блок – схеме:
Пример: определить вид введенного числа – положительное, отрицательное или ноль.
Public Sub prog2() Dim x As Double Dim s As String x=Worksheets(1).Range("A1") If x > 0 Then s = "положительное" ElseIf x = 0 Then s = "ноль" Else s = "отрицательное" End If Worksheets(1).Range("C2")=s End Sub | Описание переменной строкового типа Ввод значения переменной х. Значение располагается на Листе1 (Worksheets(1)) в ячейке А1 (Range ("A1")). Условный оператор. Если условие принимает значение True (Истина), то выполняется оператор присваивания ветки Then (s=”положительное”) и завершается условный оператор, в противном случае проверяется второе условие: x=0. Если условие True, то s присваивается значение “нуль”, иначе – “отрицательное”. Вывод результата–s–на лист1 в ячейку С2. |
Рисунок 7 - Блок-схема программы prog2
? Найдите и исправьте ошибки (если есть) в следующих фрагментах программ:
а) If a>0 Then x=0 б) If a>0 Then x=0 Else x=1 End If
Else x=1
End If
? Найдите и исправьте ошибки (если есть) в следующем фрагменте программы. Изобразите блок-схему данного фрагмента:
If t > 0 Then
x = 1
ElseIf t < 0 Then
x = -1
Else
х = 1
End If
End If
? Составьте программу и изобразите ее блок-схему (на листах в конце тетради) для решения следующей задачи: по введенным координатам точки плоскости укажите в каком квадранте (координатной четверти) она расположена. В случае ее принадлежности осям вывести соответствующее сообщение.
2.3 Оператор цикла с параметром (For…Next)
Оператор цикла For позволяет повторять группу операторов заданное число раз.
Синтаксис: For <счётчик_цикла> =<начало> To <конец> [Step <шаг>]
<тело цикла>
[Exit For]
. . .
Next [<счётчик_цикла>]
где <счётчик_цикла>— числовая переменная;
<начало> - начальное значение (выражение) переменной <счётчик_цикла>;
<конец>- заключительное значение (выражение) переменной <счётчик_цикла>;
<тело цикла>- это последовательность операторов, которая будет выполнена заданное число раз.
Порядок выполнения: переменной <счётчик_цикла>присваивается значение<начало>и проверяется условие: <начало>£ <конец>; если условие неверно, то <тело цикла>не выполняется и управление передается на оператор, следующий за Next. Если же условие выполняется, то выполняется <тело цикла>, затем значение <счётчик_цикла>изменяется на значение <шаг> (увеличится в случае положительного значения <шаг>, и уменьшается при отрицательном значении <шаг>). Данный процесс будет выполняться пока значение <счётчик_цикла>не достигнет значения <конец> (если шаг положителен, цикл завершится, когда впервые выполнится условие:<счетчик_цикла><конец>.Если шаг цикла отрицателен, условие его завершения: <счетчик_цикла><конец>). Досрочно завершить цикл For…Next можно и с помощью оператора Exit For. Такие операторы могут быть расположены в тех местах тела цикла, где требуется из него выйти, не дожидаясь выполнения условия завершения.
Изображение в блок-схемах:
?
Какое значение примут указанные переменные в результате выполнения следующих фрагментов программы:
а) t = 10: f = 0 б) y = 0
For i = 1 To 5 For i = 2 To 10 Step 2
f = f + I y = y + i
f = t + I Next i
Next I y=_____, i=_____
t=_____, f=_____, i=______
Пример: вычислить n-ый член последовательности, заданной формулой , если .
Public Sub prog3() Dim n As Byte Dim an As Integer,a1 As _ Integer, a2 As Integer n=CByte(InputBox("n =")) a1 = 1: a2 = 1 For i = 3 To n an = a1 + a2 a1 = a2: a2 = an Next i MsgBox an End Sub | Описание переменной типа Byte Ввод значения переменной n (номера элемента последовательности) через окно ввода и преобразование введенного значения к типу Byte Присваивание начальных значений переменным а1 и а2 (двоеточием разделяются операторы, записанные на одной строке) Организация цикла For…Next, в котором счетчик i изменяется от 3 до n с шагом 1 Вычисление следующего члена последовательности как сумму двух предыдущих Изменение последнего и предпоследнего значений последовательности на данный момент Увеличение счетчика на 1 (конец тела цикла) |
Блок-схема программы:
Рисунок 8 - Блок-схема программы prog3
? Изобразите блок-схему для следующей программы и укажите, какую задачу она решает:
Public Sub pp()
n = CInt(InputBox("n="))
a = 0: b = 0
For i = 100 To n Step -1
If i Mod 2 = 0 Then
a = a + i
Else
b = b + 1
End If
Next i
MsgBox Abs(a - b)
End Sub
______________________________
______________________________
? Составьте программу и изобразите ее блок-схему (на листах в конце тетради) для решения следующей задачи: вычислите разность между суммой и произведением первых n натуральных чисел (значение n вводится).
2.4 Циклы с предусловием и постусловием
Циклы данного вида используются, когда заранее не известно сколько раз будет выполняться тело цикла.
Циклы с предусловием (Do While…Loop, While…Wend, Do Until…Loop) представлены в таблице 13, а операторы циклов с постусловием (Do…Loop While, Do…Loop Until) - в таблице 14.
Отличие циклов с предусловием от циклов с постусловием заключается в том, что тело цикла первых может не выполниться ни разу, в то время как тело цикла с постусловием всегда выполнится хотя бы один раз.
Таблица 13 – Циклы с предусловием
Синтаксис | Do While <условие> <тело цикла> [Exit Do] … Loop | While <условие> <тело цикла> Wend | Do Until <условие> <тело цикла> [Exit Do] … Loop |
Порядок выполнения | <Тело цикла> будет выполняться в том случае, когда <условие> имеет значение истина (TRUE) (цикл продолжается при истинном значении <условия>). Если <условие> ложно (FALSE), то выполняются операторы, стоящие за циклом. В первом случае есть возможность досрочного выхода из цикла (это реализовано через Exit Do). | <Тело цикла> выполняется до тех пор, пока <условие> не примет значение истина (цикл продолжается при ложном значении <условия>). Есть возможность досрочного выхода из цикла (это реализовано через Exit Do). | |
Изображение в блок-схемах |
? Какое значение примут указанные переменные в результате выполнения следующего фрагмента программы:
а) n = 5: s = 0 Do While n <= 10 n = n + 1 s = s + n Loop | б) n = 5: s = 0 Do Until n >= 10 n = n + 1 s = s + n Loop |
n=________, s=________ | n=________, s=________ |
Таблица 14 - Циклы с постусловием
Синтаксис | Do <тело цикла> [Exit Do] … Loop While <условие> | Do <тело цикла> [Exit Do] … Loop Until <условие> |
Порядок выполнения | <Тело цикла> будет выполняться в том случае, когда <условие> имеет значение истина (цикл продолжается при истинном значении <условия>). Если <условие> ложно, то выполняются операторы, стоящие за циклом. Предоставлена возможность досрочного выхода из цикла (это реализовано через Exit Do). | <Тело цикла> выполняется до тех пор, пока <условие> не примет значение истина (цикл продолжается при ложном значении <условия>). Есть возможность досрочного выхода из цикла (это реализовано через Exit Do). |
Изображение в блок-схемах |
? Какое значение примут указанные переменные в результате выполнения следующего фрагмента программы:
а) n = 9: s = 0 Do n = n - 1 s = s + n Loop While n >= 5 | б) n = 9: s = 0 Do n = n - 1 s = s + n Loop Until n >= 5 |
n=________, s=________ | n=________, s=________ |
Пример: организовать ввод последовательности целых чисел, пока их сумма не превысит целого числа m. Вывести количество введенных чисел.
Public Sub prog4() Dim x As Integer, m As Integer Dim s As Integer Dim i As Integer m=InputBox("Введите число m") i = 1 s =InputBox("Введите 1 число") Do While s <= m i = i + 1 x=InputBox("Введите " & i & "число") s = s + x Loop MsgBox ("Количество чисел " & i) End Sub | Ввод предельного числа Номер вводимого числа последовательности Ввод первого числа последовательности Цикл с предусловием: тело цикла выполняется пока условие s<=m имеет значение Истина (TRUE) Тело цикла: увеличение номера на 1 ввод очередного (i-го) значения добавление введенного значения к предыдущему значению суммы Конец тела цикла Вывод значения переменной i |
Рисунок 9 - Блок-схема программы prog4
? Составьте программы и изобразите их блок-схемы (2 программы: используя один цикл с предусловием и один с постусловием) для решения следующей задачи: вычислите произведение первых n натуральных чисел (значение n вводится).
Массивы
Массив – совокупность однотипных элементов данных (чисел, логических данных, символов), которой при обработке присвоено определенное имя. Массивы бывают статические и динамические. Статическими называются массивы, количество элементов в которых заранее известно и не изменяется в ходе выполнения программы. Динамические массивы – массивы, в которых либо не известно начальное количество элементов, либо размерность массива (количество элементов) изменяется при выполнении программы.
Описание массивов:
1) одномерный статический массив
Dim <имя массива> (<начальное значение индекса> To <конечное значение индекса>) [As <тип элементов массива>]
или
Dim <имя массива> (<номер последнего элемента массива>) [As <тип элементов массива>]
2) двумерный статический массив
Dim <имя массива> ( <начальное значение индекса по строкам> To <конечное значение индекса по строкам >, < начальное значение индекса по столбцам> To < конечное значение индекса по столбцам>) [As <тип элементов массива>]
или
Dim <имя массива> ( <номер последней строки>, <номер последнего столбца >) [As <тип элементов массива>]
Первый способ отличается от второго тем, что в первом случае указывается индекс первого и последнего элементов, во втором же – только количество элементов, нумерация которых может начинаться как с 0, так и с 1. Это зависит от опции Base (задает базовый индекс). Если опция не указана, то нумерация элементов массива начинается с нуля. Для изменения базового индекса в начале листа модуля необходимо написать Option Base 1.
Пример:
а) Dim А(1 To 10) As Integer – массив А состоит из 10 элементов целого типа, индексы которых 1, 2, …, 10.
б) Dim А(10) As Integer – массив состоит из 11 значений целого типа. Индексация зависит от опции Base. Если опция не указана, то номера элементов - от 0 до 10, если же указана (т.е. вначале модуля записано Option Base 1), то номера элементов изменяются от 1 до 10.
? Какие значения принимают указанные объекты при описании следующего массива: Dim A (9) As Byte
Элементы массива_______
Индекс массива_____________________________
? Укажите значение всех элементов массива, ввод и описание которого организованы следующим образом:
Dim a(1 To 10) As Double
For i = 1 To 10
a(i) = i + 5
Next i
______________________________
3) динамический массив
Dim <имя массива> ( )[As <тип элементов массива>]
После определения количества элементов массива выполняется его переопределение:
ReDim <имя массива> (<задается размерность массива (одномерного/двумерного >)
Пример: Dim А( ) As Single–динамический массив А вещественных элементов
n=7
ReDim A(1 To n) – переопределение одномерного массива из n значений
ReDim A(5,n) – переопределение двумерного динамического массива, состоящего из 5 сток и n столбцов (начало индексации элементов определяется по опции Base)
Обращение к элементу массива осуществляется следующим образом: указывается имя массива, а затем в круглых скобках указывается номер элемента в массиве. Если массив двумерный – указывается вначале номер строки, затем через запятую номер столбца.
? Исправьте ошибки (если есть) в следующем фрагменте программы:
Dim a(1 To 10) As Double
n = 5
ReDim a(1 To n)
For i = 1 To n
a(i) = i
Next i
Пример. Определить сумму положительных элементов массива A5×8.
Public Sub prog4() Dim a(1 To 5, 1 To 8) As _ Integer Dim s As Integer s = 0 For i = 1 To 5 For j = 1 To 8 a(i,j)=Worksheets(1).Cells(i,j) If a(i, j) > 0 Then s = s + a(i, j) End If Next j Next I Worksheets(1).Range("A12")= s End Sub | Описание целочисленного массива из 5 строк и 8 столбцов Обнуление переменной s Цикл по строкам (номер строки от 1 до 5) Цикл по столбцам (номер столбца от 1 до 8) Ввод элементов массива с листа Excel (номера строк изменяются от 1 до 5, столбцов – от 1 до 8) Сравнение элементов массива с нулем Добавление положительного элемента к текущей сумме положительных элементов Прибавление шага (в данном случае 1) к счетчику j Прибавление шага (в данном случае 1) к счетчику i Вывод результата в ячейку А12 |
Рисунок 10 - Блок-схема программы prog4
Пример. В одномерном динамическом массиве определить максимальный элемент и поменять его местами с первым.
Public Sub prog5() Dim b() As Double Dim max As Double, m As Double n=CInt(InputBox("Введите размерность массива")) ReDim b(1 To n) For i = 1 To n b(i) = CDbl(InputBox("Введите " & i & "-ый элемент массива")) Next i max = b(1): m = 1 For i = 2 To n If b(i) > max Then max = b(i) m = i End If Next i t = b(1) b(1) = b(m) b(m) = t For i = 1 To n Worksheets(1).Range("D"& i)=b(i) Next i End Sub | Описание динамического массива вещественных значений Ввод размерности массива (вводимое значение преобразуется к целому типу) Переопределение массива Цикл с параметром используется для ввода элементов массива через окно ввода Переменной max присваивается значение первого элемента массива (считаем максимальным первый элемент) и присваивается переменной m его номер Начиная со второго элемента просматриваются все элементы массива Каждый элемент сравнивается с максимальным на данный момент элементом: если текущий (i-ый) элемент оказался больше максимального, то значение переменной max изменяется на это значение и запоминается его номер в переменной m С помощью промежуточной переменной t меняются значения двух переменных С помощью цикла с параметром выводится массив (элементы массива) на лист1 в столбец D начиная с первой строки |
Рисунок 11 - Блок-схема программы prog5
? Составьте программу и изобразите ее блок-схему (на листах в конце тетради) для решения следующей задачи: в одномерном массиве из 25 значений найти сумму квадратов максимального и минимального элементов.
? Составьте программу и изобразите ее блок-схему (на листах в конце тетради) для решения следующей задачи: в двумерном динамическом массиве (nxm) поменять местами первую строку матрицы со строкой, которая содержите минимальный элемент всей матрицы.
4 Форма и элементы управления
По своей сути форма (или пользовательская форма) представляет собой диалоговое окно, в котором можно размещать различные элементы управления. В приложении может быть как одна, так и несколько форм. Новая форма добавляется в проект выбором команды Вставка (Insert) ® UserForm.
В VBA имеется обширный набор встроенных элементов управления. Используя этот набор и редактор форм, нетрудно создать любой пользовательский интерфейс, который будет удовлетворять всем требованиям, предъявляемым к интерфейсу в среде Windows. Элементы управления являются объектами. Как любые объекты, они обладают свойствами, методами и событиями. Элементы управления создаются при помощи Панели элементов, которая отображается на экране либо выбором команды Вид (View) ® Панель элементов (Toolbox), либо нажатием кнопки панели инструментов Standard. На этой панели представлены кнопки, позволяющие конструировать элементы управления. Для создания элементов управления служат все кнопки панели инструментов, за исключением кнопки Выбор объекта .Щелкнув по кнопке Выбор объекта, можно выбрать уже созданный в форме элемент управления для последующего его редактирования (изменения размеров или редактирования).
Список основных элементов управления и соответствующих кнопок панели элементов приведен в таблице 15.
Таблица 15
Элемент управления | Имя | Кнопка, его создающая | Элемент управления | Имя | Кнопка, его создающая |
Поле | TextBox | Переключатель | OptionButton | ||
Надпись | Label | Флажок | CheckBox | ||
Кнопка | CommandButton | Выключатель | ToggleButton | ||
Список | ListBox | Рамка | Frame | ||
Поле со списком | ComboBox | Рисунок | Image | ||
Полоса прокрутки | ScrolBar | Набор страниц | MultiPage | ||
Счетчик | SpinButton | Набор вкладок | TabStrip |
Для размещения элемента управления на лист или в форму необходимо нажать соответствующую кнопку на панели элементов и с помощью мыши перетащить рамку элемента управления в нужное место. После этого элемент управления можно перемещать, изменять его размеры, копировать в буфер обмена, вставлять из буфера обмена и удалять из формы. Основные общие свойства элементов управления приводим в таблице 16.
Таблица 16
Свойство | Описание |
Caption | Надпись, отображаемая при элементе управления |
AutoSize | Допустимые значения: True (устанавливает режим автоматического изменения размеров элемента управления так, чтобы на нем полностью помещался текст, присвоенный свойству Caption) и False (в противном случае) |
Visible | Допустимые значения: True (элемент управления отображается во время выполнения программы) и False (в противном случае) |
Enabled | Допустимые значения: True (пользователь вручную может управлять элементом управления) и False (в противном случае) |
Height и Width | Устанавливают геометрические размеры объекта (высоту и ширину) |
Left и Top | Устанавливают координаты верхнего левого угла элемента управления, определяющие его местоположение в форме |
ControlTipText | Устанавливает текст в окне всплывающей подсказки, связанной с элементом управления. В следующем примере элементу управления CommandButton назначен текст, всплывающей подсказки это кнопка: CommandButton1.ControlTipText = "Это кнопка" |
BackColor, ForeColor и BorderColor | Устанавливают цвет заднего и переднего плана элемента управления, также его границы |
BackStyle | Устанавливает тип заднего фона |
BorderStyle | Устанавливает тип границы. Допустимые значения: fmBorderStyleSingle (граница в виде контура); fmBorderStyleNone(граница невидима) |
SpecialEffect | Устанавливает тип границы. Отличается от свойства BorderStyle тем, что позволяет установить несколько типов, но одного цвета. BorderStyle позволяет установить только один тип, но различных цветов |
Picture (создание картинки) | Внедряет картинку на элемент управления. Например, на поверхности кнопки картинка отображается с помощью следующей инструкции: CommandButton1. _ Picture =LoadPicture("с:\my doc\Kpyг.bmp") Функция LoadPicture(ПолноеИмяФайла) считывает графическое изображение. Аргумент ПолноеИмяФайла указывает полное имя графического файла |
Picture (удаление картинки) | После того как картинка создана на элементе управления, иногда возникает необходимость ее удалить. Это легко достигается присвоением свойству Picture значения LoadPicture("") CommandButton1.Picture = LoadPicture("") |
Наиболее часто используемые свойства элементов управления приводим в таблице 17.
Таблица 17
Свойство | Описание |
TextBox (поле) используется для ввода текста пользователем или для вывода в него результатов расчетов программ | |
Text | Возвращает текст, содержащийся в поле |
Multiline | Допустимые значения: True (устанавливает многострочный режим ввода текста в поле) и False (однострочный режим) |
WordWrap | Допустимые значения: True (устанавливает режим автоматического переноса) и False (в противном случае) |
Label(надпись) используется для отображения надписей, например, заголовков элементов управления, не имеющих свойства Caption | |
Caption | Возвращает текст, отображаемый в надписи |
Multiline | Допустимые значения: True (устанавливает многострочный режим ввода) и False (однострочный режим) |
WordWrap | Допустимые значения: True (устанавливает режим автоматического переноса) и False (в противном случае) |
CommandButton (кнопка) используется для инициирования выполнения некоторых действий, вызываемых нажатием кнопки, например запуск программы или остановка ее выполнения, печать и т.д. | |
Caption | Возвращает текст, отображаемый на кнопке |
Cancel | Допустимые значения: True (устанавливаются отменяющие функции для кнопки, т.е. нажатие клавиши <Esc>приводит к тем же результатам, что и нажатие кнопки) и False (в противном случае) |
Accelerator | Назначает клавишу, при нажатии на которую одновременно с клавишей <Alt> происходит запуск действий, связанных с кнопкой. Например CommandButton1.Accelerator=”C” |
Default | Задаёт кнопку по умолчанию, т.е. устанавливает ту кнопку, для которой действия, связанные с ней, будут выполняться при нажатии клавиши <Enter> |
Frame (рамка) используется для визуальной группировки элементов управления | |
Capture | Отображает надпись рамки |
OptionButton (переключатель) позволяет выбрать один из нескольких взаимоисключающих параметров. Переключатели обычно отображаются группами, обеспечивая возможность выбора альтернативного варианта. | |
Capture | Надпись, отображаемая рядом с переключателем |
Value | Возвращает True, если переключатель выбран и False в противном случае |
Пример. В качестве примера работы с формой сконструируем простое приложение, вычисляющее значение функции, например Cos(x).
Перейдем в VBA и, выполнив команду Insert (Вставка) ® UserForm, добавим в проект форму. Расположим на форме следующие элементы управления
Рисунок 14 – Вид формы в режиме конструктора
Таблица 18