サブルーチンを実行する

ユーザー定義のサブルーチンの実行には 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