48

CallVB/VBA でサブルーチンを呼び出すときにキーワードを使用します。オプションなのはわかっていますが、使用するのと使用しないのとではどちらがよいのでしょうか? 私はいつもそれがもっと露骨だと思っていましたが、多分それはただのノイズです.

また、別のフォーラムでこれを読みました:Call値を返さないことがわかっているため、キーワードを使用する方が高速です。したがって、戻り値用のスペースを確保するためにスタックスペースを設定する必要はありません。

4

9 に答える 9

30

あはは。私はこれについて長い間疑問に思っていました.VBAに関する2インチの厚さの本を読んでも、VBEの検索機能を使用して大規模なプロジェクトで呼び出しを簡単に見つけたい場合を除いて、基本的に使用しないでください.

しかし、私は別の用途を見つけました。

コード行をコロン文字で連結できることがわかっています。次に例を示します。

Function Test(mode as Boolean) 
    if mode = True then x = x + 1 : Exit Sub
    y = y - 1
End Sub

ただし、行の先頭でプロシージャ呼び出しを使用してこれを行うと、VBE は、ラベルを参照していると見なし、インデントを削除して、行を左マージンに揃えます (プロシージャが意図したとおりに呼び出された場合でも)。

Function Test()
Function1 : Function2
End Function

Callステートメントを使用すると、コードのインデントを維持しながらプロシージャ コールを連結できます。

Function Test()
    Call Function1 : Call Function2
End Function

上記の例でCallステートメントを使用しない場合、VBE は "Function1" がラベルであると想定し、コード ウィンドウで左揃えにしますが、エラーは発生しません。

于 2014-03-11T12:07:07.477 に答える
11

VB6 の場合、VB.NET に変換される可能性がある場合Callは、構文が変わらないことを意味します。(VB.NET では、メソッド呼び出しに括弧が必要です。) (個人的には、これを気にする価値はないと思います。.NET コンバーターは少なくとも、必要に応じて括弧を入れることができます。次のようにリストしています。理由です。)

それ以外の場合は、単なる構文糖衣です。

Call関数はとにかくその値を返し、VB はそれを受け取るためにローカル変数を作成する必要がないため、他のメソッド/関数を呼び出す場合、キーワードは高速ではない可能性が高いことに注意してくださいCall

于 2010-04-04T05:55:07.120 に答える
10

いつもCallVBAで使っています。私には、それはただきれいに見えます。しかし、私は同意します、それは単なる構文糖衣であり、それは個人的な好みの領域です. 私は過去数年間でおそらく十数人のフルタイムの VBA 担当者に出くわしましたが、そのうちの 1 人もCall. これには、どのコードが私のものであるかを常に知っているという追加の利点がありました。:p

于 2010-04-06T01:06:00.713 に答える
4

いいえ、呼び出しごとに 7 文字を追加するだけで、メリットはありません。

于 2010-04-06T01:18:09.627 に答える
3

CallVB.NET で使用する可能性のある共通ライブラリ関数のすべての VBA 開発に使用します。これにより、VB のすべてのフレーバー間でコピー アンド ペーストを使用してコードを移動できます。これは、貼り付けたコードを「フォーマット」または「きれいに印刷」するときにコード エディターが作成する構文エラーを回避するために行います。唯一の編集は、通常、Setステートメントの包含/除外です。

VB/VBA コードを VB.NET に移行する予定がない場合は、Callステートメントを使用する必要はありません。

于 2010-04-05T14:27:13.880 に答える