Основы офисного программирования и язык VBA


Вызовы процедур Sub - часть 3


Sub CompVal(ByVal x As Single, ByRef y As Single, _ ByVal z As Integer, ByRef w As String)

If z > 0 Then ' увеличение y = x + 100 w = "increase" Else ' уменьшение y = x - 100 w = "decrease" End If End Sub

Рассмотрим процедуру TestCompVal, в которой несколько раз вызывается процедура CompVal:

Sub TestCompVal() Dim a As Single Dim b As Single Dim n As Integer Dim S As String

n = 5: a = 7.4 ' значения параметров CompVal a, b, n, S ' 1-ый вызов Debug.Print b, S

CompVal 7.4, b, 5, S ' 2-ой вызов Debug.Print b, S

CompVal 0, 0, 0, S ' 3-ий вызов Debug.Print b, S

CompVal 0, 0, 0, "В чем дело?" ' 4-ый вызов Debug.Print b, S End Sub

В результате выполнения этой процедуры будут напечатаны следующие результаты:

107,4 increase 107,4 increase 107,4 decrease 107,4 decrease

Первые два вызова корректны. Следующие два вызова хотя и допустимы в языке VBA, но приводят к тому, что параметры, переданные по ссылке, не меняют своих значений в ходе выполнения процедуры и, по существу, вызов ByRef по умолчанию заменяется вызовом ByVal. Конечно, было бы лучше, если бы эта программа выдавала ошибки на этапе проверки синтаксиса.




Начало  Назад  Вперед



Книжный магазин