1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VBAのCall文

Posted at

VBA(Visual Basic for Applications)はMicrosoft Officeに搭載されている言語(DSL?)である.
VBAの情報源として,VBA言語リファレンスVBA Language Specificationという文書がある.

ここではCall文(Call Statement)の書式について解説します.
以下の定義が同じモジュールにあるものとします.

Sub test0()
End Sub

Sub test1(a)
End Sub

Sub test2(a, b)
End Sub

次の12通りの呼び出しが有効であるかどうかを考えてみます.

  1. test0
  2. test0()
  3. Call test0
  4. Call test0()
  5. test1 1
  6. test1(1)
  7. Call test1 1
  8. Call test1(1)
  9. test2 1, 2
  10. test2(1, 2)
  11. Call test2 1, 2
  12. Call test2(1, 2)

この内の4.はVBEでは入力できない.イミディエイトを使うと入力でき,実行もできることがわかる.

各パターン解説

言語リファレンスのCallステートメントの説明によると,次のようにわかる.

Callキーワードを省略したら()を付けてはいけない.

1と5と9はCallキーワードと()がないので,実行できる.
2と10はコンパイルエラー.
意外なことに,6は実行できる.

Callキーワードがある場合は()が必要

4は入力できないので,8と12は実行できる.
3 7 11は全てコンパイルエラーになる.

6はなぜ大丈夫なのか?

test1(1)

引数が1つのため,第1引数の式が(1)と解釈されているようです.

Language Specificationよりわかること

call-statement = "Call" (simple-name-expression / member-access-expression / index-expression / with-expression)
call-statement =/ (simple-name-expression / member-access-expression / with-expression) argument-list
5.4.2.1 Call Statement

Callをつけた場合はindex-expressionが使えることになっています.index-expressionでは()に引数を記入します.
一方,Callをつけない場合はargument-listを使って引数を指定しています.

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?