Передача данных при вызове программы

Вызывая подпрограмму, мы вправе передать в нее переменные или значения. Эта возможность еще более расширяет область применения подпрограмм, позволяя выполнять одни и те же действия с различными исходными данными.

Рассмотрим в качестве примера программу СлучайныеЧисла и подпрограмму Оформление. Сейчас разыгрывается строго 10 чисел и форматируются первые 10 ячеек столбца А. Модернизируем программу СлучайныеЧисла и введем в неё запрос о количестве разыгрываемых чисел. Получим следующий код:

1) Sub СлучайныеЧисла()
2) Dim СлучЧисло As Integer
3) Dim Листов As String
4) Dim КолЧисел As Integer
5) Листов = Application.SheetsInNewWorkbook
6) Application.SheetsInNewWorkbook = 1
7) Workbooks.Add
8) ActiveSheet.Name = "Случ. числа"
9) КолЧисел = Int(InputBox("Введите количество чисел:"))
10) For i = 1 To КолЧисел
11) СлучЧисло = Int(100 * Rnd())
12) Cells(i, 1).Value = СлучЧисло
13) Next i
14) 'Вызов подпрограммы Оформление:
15) Оформление КолЧисел
16) Sheets.Add After:=Worksheets(Worksheets.Count)
17) Worksheets(1).Select
18) Range("A1").Select
19) Application.SheetsInNewWorkbook = Листов
20) ActiveWorkbook.SaveAs Filename:="C:\St\Случайные числа.xls"
21) MsgBox "Случайные числа разыграны!"
22) End Sub

Внесем изменения в программу Оформление:

1) Sub Оформление(КолЯчеек)
2) Range(Cells(1,1),Cells(КолЯчеек,1)).Select
3) Selection.Font.Italic = True
4) With Selection.Borders(xlEdgeLeft)
5) .LineStyle = xlDot
6) .ColorIndex = 5
7) End With
8) With Selection.Borders(xlEdgeTop)
9) .LineStyle = xlDot
10) .ColorIndex = 5
11) End With
12) With Selection.Borders(xlEdgeBottom)
13) .LineStyle = xlDot
14) .ColorIndex = 5
15) End With
16) With Selection.Borders(xlEdgeRight)
17) .LineStyle = xlDot
18) .ColorIndex = 5
19) End With
20) With Selection.Borders(xlInsideHorizontal)
21) .LineStyle = xlDot
22) .ColorIndex = 5
23) End With
24) Range("A1").Select
25) End Sub

Здесь есть два интересных момента. Во-первых, обращение к подпрограмме Оформление в программе СлучайныеЧисла содержит аргумент КолЧисел (15-я строка). Во-вторых, в первой строке Оформление в круглых скобках задано имя переменной КолЯчеек. Она принимает значение аргумента, который указывается в вызове подпрограммы (т.е. КолЧисел), и затем задает номер последней оформляемой строки.

Задание:

1. Создайте подпрограмму ОформлениеТаблицы, которая оформляет выходную таблицу (из программы МассивДоценты_СохранениеДанных_Мод) следующим образом:

Передача данных при вызове программы - student2.ru

Выходная таблица имеет ровно 3 столбца. Количество строк может варьироваться.

В 62-й строке программы МассивДоценты_СохранениеДанных_Мод снимете комментарий.

2. Протестируйте работу программы в различных режимах.

Передача по ссылке и по значению

Передача аргументов из одной программы в другую осуществляется двумя способами — по ссылке (by reference) и по значению (by value). В первом случае передается сама переменная, поэтому ее значение в подпрограмме можно изменить. Во втором случае — только значение переменной, а не она сама, и изменить ее в вызванной подпрограмме нельзя.

Выбор способа передачи осуществляется ключевыми словами ByRef и ByVal, которые в круглых скобках указываются в описании вызываемой подпрограммы.

В Модуль5 наберите и протестируйте работу следующих программ:

1. Пример передачи переменной UserName по ссылке с одним и тем же именем переменной (подпрограмма вызывается только для одной переменной):

Sub ПередачаАргументаПоСылке ()

Dim UserName As String

UserName = "Иван"

ChangeName UserName

MsgBox UserName

End Sub

Sub ChangeName (ByRef UserName)

UserName = "Петр"

End Sub

2. Пример передачи переменной по ссылке с разными именами (одна и та же подпрограмма вызывается для разных переменных):

Sub ПередачаАргументаПоСсылке_РазныеПеременные ()

Dim UserName As String

UserName = "Иван"

ChangeName2 UserName

MsgBox UserName

End Sub

Sub ChangeName2(ByRef NewName)

NewName = "Петр"

End Sub

3. Пример передачи переменной по значению (в подпрограмму передается только её значение):

Sub ПередачаАргументаПоЗначению()

Dim UserName As String

UserName = "Иван"

ChangeName3 UserName

MsgBox "В исходной программе имя осталось прежним " _

& UserName

End Sub

Sub ChangeName3(ByVal UserName)

MsgBox "Сначала был " & UserName & "."

UserName = "Петр"

MsgBox "В вызванной подпрограмме имя стало " & UserName

End Sub

Функции

Отличие функции от подпрограммы:

§ Функция начинается ключевым словом Function и заканчивается ключевыми словами End Function.

§ Функцию можно вызывать из формулы, введенной в ячейку.

§ Функция может возвращать значение в вызывающую программу или формулу.

Рассмотрим пример функции Multiply, вычисляющей произведение двух чисел.

Sub ВызовФункции()

Dim Var1 As Integer

Dim Var2 As Integer

Dim Var3 As Integer

Var1 =5

Var2 = 10

Var3 = Multiply(Var1, Var2)

MsgBox Var3

End Sub

Function Multiply(ByVal Var1, ByVal Var2)

Multiply = Var1 * Var2

End Function

Наши рекомендации