- •3.5.2.Создание процедур и особенности способов ввода-вывода информации в vba
- •1. Особенности ввода-вывода информации в диалоговом режиме
- •4. Операторы Data и Read не используются в vba и при вычислении функций, так как аргументы функций могут быть введены непосредственно в ячейки рабочего листа Excel.
- •I. Задания по разветвляющимся алгоритмам
- •II. Задания по циклическим алгоритмам
3.5.2.Создание процедур и особенности способов ввода-вывода информации в vba
Процедура – это универсальная единица программного кода, с помощью которой можно выполнять различные задания на VBA. Это наименьшая единица программного кода, на которую можно ссылаться по имени и которая может выполняться независимо.
Процедуру можно определить и так – это VBA-программа наименьшего состава, так как любую VBA-программу можно оформить в виде одной-единственной процедуры. Поэтому целесообразно при создании процедур рассмотреть способы ввода-вывода исходных данных в VBA и способы запуска VBA-программ.
Рассмотрим особенности способов ввода-вывода информации в VBA в сравнении со способами, используемыми в традиционных языках программирования, например, Qbasic. Отметим, что для ввода информации в VBA, кроме используемого в Qbasic оператора присваивания, используются как диалоговые окна, так и свойства объектов, в частности, свойства рабочего листа Excel.
1. Особенности ввода-вывода информации в диалоговом режиме
В VBA для ввода информации в диалоговом режиме используется встроенное диалоговое окно - функция InputBox (в отличие от оператора Input в Qbasice), а для вывода информации встроенное диалоговое окно - процедура MsgBox (в отличие от оператора Print в Qbasice). Наличие встроенных диалоговых окон (если их возможностей достаточно) освобождает пользователя от необходимости проектирования диалоговых окон.
Функция InputBox выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода текста пользователем или нажатия кнопки, а затем возвращает значения типа String, содержащее текст, введенный в поле (Л.6, с. 222).
Пример 1: ИмяКлиента=InputВох («Введите ваше имя») -будет выдано диалоговое окно с полем для ввода имени.
После ввода имени, например, Кирилл, щелкните кнопку ОК.
Процедура MsgBox «Привет,»&ИмяКлиента выдает диалоговое окно с сообщением: Привет, Кирилл.
Программный проект на VBA может быть реализован в виде процедуры Приветствие 1.
Private Sub Приветствие 1()
Dim ИмяКлиента As String
ИмяКлиента = IприtВох("Введите ваше имя", "Пример окна ввода")
MsgBox "Привет," & ИмяКлиента, vbInformation, "Пример окна сообщения"
End Sub
Функция InputBox используется и для ввода численных значений переменной. В этом случае для преобразования строки в число используется функция Vаl(строка), которая возвращает числа, содержащиеся в строке, как числовые значения соответствующего типа. После выполнения вычислений над числами результат выдается на экран процедурой MsgBox. Для преобразования чисел в строковые значения используется функция Str(число), которая воспринимает только точку (.). Если дробная часть числа отделяется от целой запятой (,) то используется функция СStr(число).
Пример 2: Вычислить значение выражения с2=а2 +b2 при а=256.1584 и b=. Значения а и b ввести в диалоговом режиме, для этого b преобразуем к виду b= при х=3.
Процедура на VBA имеет вид:
Sub Пример2 ()
Dim a As Double, x As Double 'а и х описаны как переменные двойной точности
а = Vа1(InputВох("Введите а")) 'Ввод значения а
х = Vа1(InputВох("Введите х")) ' Ввод значения х
b = 1/(х)^(1/4) 'Вычисление значения b
C#=a^2+b^2 'Вычисление значения с# двойной точности
MsgBox ("Ответ=" + Str(C#)) 'Выдает результаты
End Sub Ответ: 65617.7032408292.
Пример 3: Ввести в диалоговом режиме целочисленную квадратную матрицу А порядка N и вычислить сумму элементов матрицы.
Процедура на VBA имеет вид:
Sub Диалог()
Dim a() As Integer, N As Integer
Dim i As Integer, j As Integer
N = Vа1(InputВох("Введите порядок матрицы"))
ReDim a(N, N)
For i = 1 To N
For j = 1 To N
a(i, j) = InputВох("Введите целочисленное значение матрицы")
Cells(i,j) = a(i,j)
Next j,i
Sum=0
For i = 1 To N
For j=l To N
Sum = Sum + a(i,j)
Next j,i
MsgBox ("Sum=" + Str(Sum))
End Sub
2. В VBA уникальной возможностью по вводу-выводу информации в ячейки рабочего листа Excel является использование свойства ячеек Value .
Пример 4: В диапазон ячеек А1:В2 ввести число 5, а в диапазон ячеек АЗ:В4 ввести символ «*». Результат решения задачи х=70 вывести в активную ячейку.
Sub Пример4()
Range("Al:B2").Value = 5
Range("A3:B4").Value = "*"
х == 70: ActiveCell.Value = x
End Sub
Пример 5: Вывести результаты решения задачи, получаемые в цикле, на рабочий лист Excel
Sub Пример5()
A=l:b=2:c=l:x=5
For у == 1 То 8
z = Sqr(A *x + b*y + c)
Cells(y, 1). Value = z 'Результат решения задачи z выводится в 1 столбец рабочего листа Ехсеl
Next у
End Sub
Пример 6: В цикле вывести в ячейки рабочего листа Excel символ «*».
Sub Пример6()
For i=l To3
For j = 1 То 5
Cells(I,J)Value = "*" 'В ячейки I,J рабочего листа Ехсеl выводится символ"*"
Next j, i
End Sub
Заметим, что в Qbasice вывод символов в заданную позицию осуществляется с помощью операторов Locate и Print.
3. Свойства ячеек Value позволяет также значение из ячейки присвоить некоторой переменной.
Например, введем в ячейку С1 число 4 и присвоим его переменной х.
X=Range("cl"). Value - переменной х будет присвоено значение 4. Если в диапазон ячеек ввести численные значения переменных, то, используя свойство Value, эти значения можно присвоить переменным. То есть, можно провести аналогию с операторами Data и Read, используемыми в Qbasice для ввода численных значений многих переменных (массивов и матриц). Вместо оператора Data значения переменных могут быть введены в диапазон ячеек рабочего листа Excel, а вместо оператора Read может быть использовано свойство Value для присвоения значений ячеек переменных.
Пример 7: Ввести численные значения элементов матрицы а(5,5) в диапазон ячеек рабочего листа Excel и, используя свойство ячеек Value, присвоить их переменным a(i,j). Вычислить сумму элементов матрицы, а) Введем в диапазон ячеек А1:Е5 численные значения элементов матрицы а(5,5), например, 1, 2,..., 25, и реализуем процедуру их присвоения переменным a(i,j); в) вычислим сумму элементов матрицы.
Sub Пример7()
Dim a() As Integer, N As Integer
Dim i As Integer, j As Integer
N = InputВох("Введите порядок матрицы")
ReDim a(N, N)
For i = 1 To N
For j = 1 ToN
a(i,j)=Cells(i,j).Value
Next j, i
Sum=0
For i = 1 To N
For j = 1 To N
Sum = Sum + a(i, j)
Next j, i
MsgBox (("Sum=") + Str(Sum))
End Sub
Пример 8: Заполнить массив с помощью датчика случайных чисел и вывести его в первый столбец второго листа рабочей книги. Отсортировать массив в порядке возрастания и вывести его во второй столбец второго листа рабочей книги.
Sub a6()
Dim a() As Integer, N As Integer
Dim i As Integer, j As Integer
Sheets("лист2").Select:Cells.Delete
N = Vа1(InputВох("Введите порядок матрицы"))
ReDim a(l ToN)
Randomize Timer
For i = 1 To N
A(i)=Rnd*99+1.1
Cells(i, l)=a(i)
Next i
For i = 1 To N – 1
flag = True
For j=l To N-l
If a(j+l)<a(j)Then
t=a(j):a(j)=a(j+1):a(j+1)=t
flag = False
End If
Next j
If flag Then Exit For
Next i
For i = 1 To N
Cells(i, 2) = a(i)
Next i
MsgBox ("см.лист2")
End Sub