ユーザー定義のサブルーチンの実行には 2 つの方法があります。1 つは Call ステートメントにサブルーチンを含める方法で、もう 1 つはサブルーチンに渡される引数をサブルーチン名の後に入力する方法 (引数が存在する場合) です。呼び出しの規則は、サブルーチンが呼び出されたときにサブルーチンに渡されると予想される引数の数と、呼び出しに Call ステートメントを使用したかどうかによって異なります。
引数をとらないサブルーチンを Call ステートメントの中に含めて呼び出す場合、サブルーチン名の後ろに空のカッコを付けても付けなくても構いません。
以下に例を示します。
Dim aName As String
Sub PrintName1
' Make the contents of firstName$ be all uppercase
' and display the result.
firstName$ = UCase$(firstName$)
Print firstName$
End Sub
firstName$ = "David"
Call PrintName1()
' Output: DAVID
Call PrintName1
' Output: DAVID
サブルーチン名だけを入力して、パラメータのないサブルーチンを呼び出すことができます。この場合、空のカッコを付けることはできません。
以下に例を示します。
PrintName1
' Output: DAVID
単一の引数をとるサブルーチンを呼び出す場合、サブルーチンを Call ステートメントに含めるときに引数をカッコで囲みます。引数を参照渡しにする場合は引数を一重カッコで囲み、値渡しにする場合は二重カッコで囲みます。
以下に例を示します。
Sub PrintName2(someName As String)
' Make the contents of someName$ be all uppercase
' and display the result. If someName$'s contents are
' passed by reference, change the value of the
' corresponding variable in the caller's scope.
' Otherwise, don't.
someName$ = UCase$(someName$)
Print someName$
End Sub
firstName$ = "David"
Call PrintName2(firstName$)
' firstName$ is passed by reference by default.
' Output: DAVID
Print firstName$
' Output: DAVID
firstName$ = "David"
Call PrintName2((firstName$))
' Output: DAVID
Print firstName$
' Output: David
単一の引数をとるサブルーチンは、サブルーチンの名前と引数を入力するだけで呼び出すことができます。引数をカッコで囲むと、引数はサブルーチンに値渡しされます。以下に例を示します。
firstName$ = "David"
PrintName2(firstName$)
' firstName$ is passed by value.
' Output: DAVID
Print firstName$
' Output: David
PrintName2 firstName$
' firstName$ is passed by reference.
' Output: DAVID
Print firstName$
' Output: David
複数の引数をとるサブルーチンを呼び出す場合、サブルーチンを Call ステートメントに含める際に引数をカッコで囲みます。単にサブルーチン名と引数を続けて入力してサブルーチンを呼び出す場合は、引数はカッコで囲みません。
以下に例を示します。
Dim lastName As String
Sub PrintName3(pronom As String, cognom As String)
pronom$ = UCase$(pronom$)
cognom$ = UCase$(cognom$)
Print pronom$ & " " & cognom$
End Sub
firstName$ = "David"
lastName$ = "LaFontaine"
Call PrintName3(firstName$, lastName$)
Output: ' DAVID LAFONTAINE
firstName$ = "Julie"
lastName$ = "LaFontaine"
PrintName3 firstname$, lastName$
' Output: JULIE LAFONTAINE