Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vba продолжение.docx
Скачиваний:
7
Добавлен:
18.12.2018
Размер:
101.84 Кб
Скачать

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: Вычислить значение выражения с22 +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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]