はVBA

2011-10-10 11 views
32

この私の簡素化スクリプト内のサブを呼び出します。私はエラーを理解していない。 2つの引数を持つ単純なサブルーチン呼び出しです。なぜVBAは電話を受け入れないのですか?はVBA

答えて

60

TRY - 理由については

Call CatSubProduktAreakum(Stattyp, Daty + UBound(SubCategories) + 2) 

、このMSDNからこの質問を経由して - What does the Call keyword do in VB6?

あなたは、プロシージャを呼び出すときに呼び出しキーワードを使用する必要はありません。 ただし、Callキーワードを使用して 引数を必要とするプロシージャを呼び出す場合は、引数リストを括弧で囲む必要があります。 Callキーワード を省略すると、 argumentlistのまわりのカッコも省略する必要があります。呼び出し構文を使用して任意の組み込み関数を呼び出すか、 ユーザー定義関数を呼び出す場合、関数の戻り値は破棄されます。まだこのポストに来る人のため

+1

ありがとうございます、それはうまくいくようです。私がサブルーチンを1つの引数だけで呼び出すと(そして1つの引数でそれを定義すると)、その名前(と括弧内の引数)で呼び出すことができます。 2つの引数を持つSubを呼び出すことができないのはなぜですか? – reggie

+3

@reggie括弧 'Mysub arg1、arg2、arg3'をスキップしている限り、Callなしでサブを呼び出すことはできますが、ByValとByRefを読み上げる必要があります。 – Fionnuala

+0

私は答えを完全な説明で更新しました。 – ipr101

5

、他のオプションは、単に括弧を省略することである。

Sub SomeOtherSub(Stattyp As String) 
    'Daty and the other variables are defined here 

    CatSubProduktAreakum Stattyp, Daty + UBound(SubCategories) + 2 

End Sub 

Callキーワード後方compatibiltyのためにVBAでのみ実際にあると、実際に必要とされていません。

ただし、Callキーワードを使用する場合は、構文を変更する必要があります。

'// With Call 
Call Foo(Bar) 

'// Without Call 
Foo Bar 

どちらもまったく同じことを行います。その中で言われて、あなたは(括弧はVBAでこれを行うと)なるためにそれらを意図していなかったところ、不必要に括弧を使用すると、物事が評価されるようになりますどこに注意する事例があるかもしれないことを


ので、もっと良い選択肢は、おそらくCallのキーワードと括弧を省略することです。