サーチ…


構文

  • IdentifierName [ arguments ]
  • Call IdentifierName [ (arguments) ]
  • [Let | Set] = IdentifierName [ (引数) ]
  • [Let | Set] IdentifierName [ (引数) ] =

パラメーター

パラメータ情報
IdentifierName 呼び出すプロシージャの名前。
議論プロシージャに渡す引数のカンマ区切りのリスト。

備考

最初の2つの構文は、 Subプロシージャを呼び出すためのものです。最初の構文にかっこは含まれていないことに注意してください。

これは混乱していますを参照してください。どうして括弧を使うのはなぜですか?最初の2つの構文の違いを詳しく説明しています。

3番目の構文は、 FunctionおよびProperty Getプロシージャを呼び出すための構文です。パラメタがある場合、かっこは常に必須です。 値を割り当てるときはLetキーワードを省略できますが、 参照を割り当てるときはSetキーワードが必要です

第4の構文は、 Property LetおよびProperty Setプロシージャを呼び出すための構文です。代入の右側のexpressionがプロパティのvalueパラメータに渡されます。

暗黙的な呼び出しの構文

ProcedureName
ProcedureName argument1, argument2

プロシージャー名を括弧なしで呼び出します。


エッジケース

Callキーワードは、1つの辺の場合にのみ必要です。

Call DoSomething : DoSomethingElse

DoSomethingDoSomethingElseは呼び出されるプロシージャです。 Callキーワードが削除された場合、 DoSomethingはプロシージャコールではなくラインラベルとして解析され、コードが破損します。

DoSomething: DoSomethingElse 'only DoSomethingElse will run

戻り値

プロシージャコールの結果( FunctionProperty Getプロシージャなど)をProperty Getするには、コールを割り当ての右側に配置します。

result = ProcedureName
result = ProcedureName(argument1, argument2)

パラメータがある場合はカッコが必要です。プロシージャにパラメータがない場合、かっこは冗長です。

これは混乱しています。どうして括弧を使うのはなぜですか?

カッコは、 関数呼び出しの引数を囲むために使用されますプロシージャー呼び出しのためにこれらを使用すると、予期しない問題が発生する可能

実行時に意図しない値をプロシージャに渡すことで、そして単に無効な構文でコンパイル時にバグが発生する可能性があるためです。

ランタイム

括弧を冗長にするとバグが発生する可能性があります。オブジェクト参照をパラメータとして取るプロシージャを指定すると...

Sub DoSomething(ByRef target As Range)
End Sub

...そしてかっこで呼び出されました:

DoSomething (Application.ActiveCell) 'raises an error at runtime

これにより、 "Object Required"ランタイムエラー#424が発生します。その他のエラーが発生する可能性がありApplication.ActiveCell 。ここでは、 Application.ActiveCell Rangeオブジェクト参照は、 targetByRef渡すことを指定するプロシージャのシグネチャに関係なく評価され 、値によって渡されます。上記のスニペットでByValDoSomethingに渡した実際の値は、 Application.ActiveCell.Valueです。

括弧は、括弧式の値を評価するために、VBAを強制し、その結果を渡すByVal呼ばれる手続きへ。評価された結果の型がプロシージャの予想される型と一致せず、暗黙的に変換できない場合、実行時エラーが発生します。

コンパイル時

このコードはコンパイルに失敗します:

MsgBox ("Invalid Code!", vbCritical)

("Invalid Code!", vbCritical)は値として評価できないためです。

これはコンパイルして動作します:

MsgBox ("Invalid Code!"), (vbCritical)

しかし間違いなく愚かに見えるだろう。重複したかっこは避けてください。

明示的な呼び出しの構文

Call ProcedureName
Call ProcedureName(argument1, argument2)

明示的な呼び出し構文では、引数キーワードの前後にCallキーワードとかっこが必要です。パラメーターがない場合、括弧は冗長です。この構文は、より現代的な暗黙的な呼び出し構文がVBに追加されたときに廃止されました。

オプションの引数

いくつかのプロシージャにはオプションの引数があります。オプションの引数は常に必須の引数の後に来ますが、プロシージャは引数なしで呼び出すことができます。

たとえば、関数ProcedureNameが2つの必須引数( argument1argument2 )と1つのオプション引数optArgument3場合、少なくとも4つの方法で呼び出すことができます。

' Without optional argument
result = ProcedureName("A", "B")

' With optional argument
result = ProcedureName("A", "B", "C")

' Using named arguments (allows a different order)
result = ProcedureName(optArgument3:="C", argument1:="A", argument2:="B")

' Mixing named and unnamed arguments 
result = ProcedureName("A", "B", optArgument3:="C")

ここで呼び出される関数ヘッダの構造は、次のようになります。

Function ProcedureName(argument1 As String, argument2 As String, Optional optArgument3 As String) As String

Optionalキーワードは、この引数を省略できることを示します。前に述べたように-ヘッダに導入されたオプションの引数は、任意の必要な引数の後に、最後に表示されなければなりません

値が関数に渡されない場合は、引数のデフォルト値を指定することもできます。

Function ProcedureName(argument1 As String, argument2 As String, Optional optArgument3 As String = "C") As String

この関数では、 cの引数が与えられていない場合、その値はデフォルトで"C"ます。値指定されている場合、これはデフォルト値をオーバーライドします。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow