VBA で、 Sub プロシージャ ( リターン値なしの関数 ) を呼び出す場合にエラーが発生することがあります。エラー発生時には以下のようにダイアログが出力されます。
スポンサーリンク
エラーとなる VBA スクリプト
' ユーザーフォームのメソッドを呼び出す UserForm1.sub1(param1, param2, param3)

意味不明なエラーダイアログ
このダイアログでエラーの原因がわかる人はまずいないと思いますが、原因は Sub プロシージャを呼び出す場合には Call を記述するか、括弧を記述せずにパラメータを与えなければならないことでした。従って、以下のように修正することでエラーは発生しなくなりました。
修正した VBA スクリプト
' Call を使って呼び出す Call UserForm1.sub1(param1, param2, param3) ' 括弧を記述せずにパラメータを設定する UserForm1.sub1 param1, param2, param3
このエラーについては、決まりですから仕方ないとは思いますが、メッセージをもうちょっと何とかしてほしいです。
Sub と Function
ところで、VBA ではリターン値なしの場合は、Sub でリターン値がある場合は、Function と記述します。Sub も Function もパラメータは与えることはできますので、違いは、リターン値を返すか否かと言うことになります。
Sub TEST1(l As Long) End Sub Function TEST2(l As Long) As Long End Function
なぜでしょうか? (?_?)
例えば、C 言語や多言語でもそうですが、このような区別はありません ( VB.NET は VBA と同じですが ) 。インタプリタ言語だからと言うことも理由にはならないようにも思います。どのような事情があったのか気になるところです。やむにやまれぬ事情があったのでしょう。もしも設計者が今頃、「 あちゃ~、あれは失敗だったね 」 なんてことが Sub と Function が存在する原因だとすれば、Void 型の仕様が追加されるかもしれませんね。
Function TEST2(l As Long) As Void
As Void は、まずないでしょうけどね