Файл: Е. А. Рябухина, О. А. Гущина, Д. А. Губанов, Д. В. Емельянов.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 01.12.2023
Просмотров: 116
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
TimeValue(E) – возвращает значение типа Date, содержащее время, заданное аргументом Е, который может быть строкой, числом или константой, представляющей время.
Timer – возвращает число, представляющее количество секунд от полуночи в соответствии с системным временем компьютера.
20. Подпрограммы в языке VBA
В языке VBA существуют два вида подпрограмм – подпрограмма-функция и подпрограмма-процедура. Принципиальное их отличие заключается в том, что подпрограмма-функция позволяет получить только один результат, присваиваемый имени функции; подпрограмма-процедура позволяет получить любое количество результатов.
Подпрограмма-функция имеет следующую структуру:
FUNCTION имя(P1 As T1, P2 As T2,…) As T
0>2>0>
Раздел описания локальных данных
Раздел операторов
Имя=Результат
EndFUNCTION
Здесь P1 , P2, … – входные (формальные) параметры (переменные или массивы), T1, T2 … – тип соответствующих параметров; T – тип результата. Если входным параметром является массив, то в заголовке подпрограммы он описывается в виде Pn() As Tn.
Описание параметра в заголовке подпрограммы может иметь более сложную конструкцию:
[Optional] [ByVal | ByRef] [ParamArray] Pi[( )] As T
Здесь Optional – необязательный параметр. При использовании этого элемента все последующие аргументы, которые содержатся в списке аргументов, также должны быть необязательными и описаны с помощью ключевого слова Optional. Все аргументы, описанные как Optional, должны иметь тип Variant. He допускается использование ключевого слова Optional для любого из аргументов, если используется ключевое слово ParamArray.
Необязательный параметр ByVal указывает, что этот аргумент передается по значению.
Альтернативный необязательный параметр ByRef указывает, что этот аргумент передается по ссылке. Описание ByRef используется в VBA по умолчанию.
Необязательный параметр ParamArray используется только в качестве последнего элемента в списке аргументов для указания, что конечным аргументом является описанный как Optional массив значений типа Variant. Ключевое слово ParamArray позволяет задавать произвольное количество аргументов. Оно не может быть использовано со словами ByVal, ByRef или Optional.
Раздел описания локальных данных включает в себя константы, переменные или массивы, сохраняющие свои значения только внутри подпрограммы.
Присвоение имени подпрограммы результата вычислений может быть записано не в виде отдельного оператора, а включено в раздел вычислений.
Обращение к подпрограмме-функции в основной программе происходит аналогично обращению к стандартной функции, при этом формальные параметры заменяются фактическими; формальные и фактические параметры должны совпадать по количеству, типу и смыслу. Фактическими параметрами могут быть константы или переменные. Если параметром является массив, то в качестве фактического параметра указывается
только его имя.
Пример: даны три массива – X(100), Y(80) и Z(50). Вычислить величину 50T=S1*S2/S3. Здесь S1=∑xi≥6, S2=∑yi≥12, S3=∑zi≥-4.
Вычисление S1, S2 и S3 удобно организовать в виде подпрограммы-функции.
Программа имеет вид:
SUBprimer()
Dim X() As Integer, Y() As Integer, Z() As Integer
ReDim X(1 To 100),Y(1 To 80), Z(1 To 50)
For I=1 To 100
X(I)=Cells(I,1)
Next I
For I=1 To 80
Y(I)=Cells(I,2)
Next I
For I=1 To 50
Z (I)=Cells(I,3)
Next I
T%=SUM(X,6)*SUM(Y,12)/SUM(Z,-4)
Cells(1,6)=T
End SUB
FUNCTION SUM(A(), K As Integer) As Integer
Dim J As Byte
SUM=0
For J=1 To Ubound(A)
If A(I)>=K Then SUM=SUM+A(I)
NextJ
EndFUNCTION
В VBA параметрами подпрограмм могут быть подпрограммы. В этом случае их значения передаются по значению.
Sub l()
Dim x As Byte, y As Byte, z As Byte
x = 7
y = 3
call Assis (f(x), y, z)
Cells(1, 1) = z
End Sub
Public FUNCTION f(ByVal a As Byte) As Byte
f = 2 * a
End FUNCTION
Sub Assis (ByVal d As Byte, ByVal q As Byte, v As Byte)
v = d + q
End Sub
Подпрограмма-процедура имеет следующую структуру:
SUB Имя(P1 As T1, P2 As T2,…)
Раздел описаний локальных параметров
Раздел операторов
EndSUB
При этом в заголовке подпрограммы перечисляются как входные, так и выходные формальные параметры.
Обращение к подпрограмме-процедуре может выполняться двумя способами:
– Call Имя(Q1,Q2,QN…)
– Имя Q1,Q2,QN…
При использовании подпрограммы-процедуры возможны следующие варианты: подпрограмма имеет входные и выходные параметры, только входные, только выходные и отсутствие параметров вообще. Второй случай обычно используется для работы с объектами OFFICE или при построении графических изображений. В третьем случае фактически входными параметрами обычно являются текущая дата или текущее время, а в последнем случае подпрограмма выполняет какую-либо фиксированную последовательность действий.
Пример: в матрице А(10,10) разделить aij>6 на сумму элементов 5-й строки, в матрице В(10,10) разделить bij>7 на сумму элементов 8-й строки, в матрице С(10,10) разделить cij>-4 на сумму элементов 4-й строки.
В этой задаче входными параметрами являются: матрица, которая подвергается преобразованиям, число, с которым сравниваются элементы, номер суммируемой строки, а выходным параметром – преобразованная матрица. Если преобразованная матрица записывается на место исходной, то матрица в качестве параметра указывается однократно.
Программа имеет следующий вид:
SUBprimer()
Dim A() As Single, B() As Single, C() As Single
REDIM A(1 To 10,1 To 10), B(1 To 10,1 To 10), C(1 To 10,1 To 10)
ВводматрицА, B, C
Call MATR(A, 6, 5)
Call MATR(B, 7, 8)
Call MATR(C, -4, 4)
Вывод преобразованных матриц A,B,C
End SUB
SUB MATR(M() As Single, K As Integer, N As Byte)
Dim I1 As Byte, J1 As Byte, S As Integer
S=0
For J1=1 To 10
S=S+M(N, J1)
Next J1
For I1=1 To 10
For J1=1 To 10
If M(I1, J1)>K THEN M(I1,J1)=M(I1,J1)/S
Next J1
Next I1
End SUB
ЛАБОРАТОРНЫЙ ПРАКТИКУМ
ЛАБОРАТОРНАЯ РАБОТА № 1.
«Программирование ввода/вывода и способы описания переменных в VBA»
Цель работы: приобретение практических навыков по разработке, отладке и тестированию программ, реализующих линейные алгоритмы, в том числе с использованием математических функций; изучение способов описания переменных, определения типов данных; приобретение умений использования простейшего ввода-вывода и работы с объектами-ячейками.
Задания:
-
В соответствии с вариантом описать переменные в первой строке таблицы явным способом и ввести их значения с помощью оператора присваивания. -
Описать переменные во второй строке таблицы с помощью суффиксов. Ввести их значения с помощью оператора присваивания. -
Описать переменные третьей строки с помощью префиксов. Ввести их значения в ячейки А1, B1 и C1 соответственно. Считать значения переменных из ячеек. -
Вычислить переменные в четвертой строке таблицы согласно формулам, не указывая тип. Записать результаты в ячейки F2 и G2 соответственно. -
С помощью функции определения типа определить тип переменных из второй и третьей строк таблицы. Результаты записать в ячейки A3-C3 соответственно и в ячейки A5-C5 соответственно. Определить тип переменных, вычисленных по формулам. Результаты записать в ячейки F3 и G3 соответственно. -
Установить цвета ячеек A1-C1, A3-C3, A5-C5 соответственно пятой строке таблицы. В ячейках F3 и G3 для шрифта установить 14 кегль Times New Roman любого цвета.
Вариант 1 | Вариант 2 | |
s = 12, b = 16,765, q = 567 | | r = 1,278, v = 78, lc = -8700 |
n1 = 56,876, alfa = 287,wts = 89 | | h = 563, j = 189, uts = 178,99 |
d3 = -0,78, z = 345, f = 56 | | m24 = 13, pk = 122, d11 = -67,7 |
| | |
Красный, желтый, зеленый | | Голубой, красный, синий |
Вариант 3 | Вариант 4 | |
a = 0,78, v = 389, c = 90 | | w = 165, g = 11345, n = 89,7654 |
l2 = 749, k34 = 13,89, delta = 2 | | rtr = 7, b = 206, k = 11900 |
i5 = 12, mtz = -0,005, s = 78000 | | u7 = 455, s = 788,6548, a = 9 |
| | |
Желтый, зеленый, красный | | Голубой, пурпурный, желтый |
Вариант 5 | Вариант 6 | |
rd = 1,897, a = 678, b = 97 | | x1 = 168, d = 14,897, j9 = 34786 |
gamma = 134, i1 = 13, nnt = 280 | | rd = 78, q2 = -98,7654, v = 1 |
k2 = 17, m81 = -59, s = 1567,89654 | | hr = 5678, g = 308, b = 99,8 |
| | |
Желтый, зеленый, голубой | | Красный, голубой, желтый |
Вариант 7 | Вариант 8 | |
v = 112, d = 16,765, y = 567 | | p6 = 12,78, vn = 18, lc = -125 |
k2 = 56,876, alfa = 68, wis = -89 | | w = 563,6, q1 = 189, u = 228,67 |
d3 = -78, z = 3452, h = 56,89 | | m24 = 3, pk = 1228, d11 = -78,788 |
| | |
Красный, желтый, зеленый | | Голубой, красный, синий |
Вариант 9 | Вариант 10 | |
a1 = 2,38, v = 489, c = 900 | | w = 165, g2 = 1034, n = 9,76 |
l2 = 49, k3 = 13,89, dt = 2 | | rr = 17, b = 2006, k = 119 |
i3 = 12, mtz = -2,005, s = 58600 | | h4 = 455, s = 78,68, a = -9 |
| | |
Желтый, зеленый, красный | | Голубой, пурпурный, желтый |
Вариант 11 | Вариант 12 | |
r = 2,897, a = 678, b = 87 | | y1 = 168, d2 = 14,897, j9 = 34786 |
om = 134, i1 = 13, nnt = 295 | | rp = 78, q2 = -18,7654, w = 1 |
k2 = 17, m81 = -59, s = 1567,89654 | | hr = 5678, m = 388, a = 99,8 |
| | |
Желтый, зеленый, голубой | | Красный, голубой, желтый |
Вариант 13 | Вариант 14 | |
s = 12, b = 16,765, q = 567 | | r = 1,278, v = 78, lc = -8700 |
n1 = 56,876, alfa = 287, wts = 89 | | h = 563, j = 189, uts = 178,99 |
d3 = -0,78, z = 345, f = 56 | | m24 = 13, pk = 122, d11 = -67,7 |
| | |
Красный, желтый, зеленый | | Голубой, красный, синий |
Вариант 15 | Вариант 16 | |
a = 0,78, v = 389, c = 90 | | w = 1605, g = 113, f = -89,7654 |
l2 = 749, k34 = 13,89, delta = 2 | | rtr = 71, b = 206, k3 = 21900 |
i5 = 12, mtz = -0,00, s = 78000 | | u7 = 781, s2 = 788,6, a = 29 |
| | |
Желтый, зеленый, красный | | Пурпурный, желтый, голубой |
Вариант 17 | Вариант 18 | |
r = 1,897, a = 678, b = 97 | | x1 = 168, d = 14,897, j9 = 34786 |
g = 134, i1 = 13, nnt = 280 | | rd = 78, q2 = -98,7654, v = 1 |
k2 = 17, m81 = -59, s = 1567,89654 | | hr = 5678, g = 308, b = 99,8 |
| | |
Желтый, зеленый, красный | | Желтый, голубой, зеленый |