Основы офисного программирования и язык 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. Конечно, было бы лучше, если бы эта программа выдавала ошибки на этапе проверки синтаксиса.




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