• ベストアンサー

Functionプロシージャーで作成する理由は

いくつかVBAのサンプルを見てるのですが http://www.accessclub.jp/supbeg/063.html のように、戻り値を必要としない(msgboxにしちゃってる)のに、 Functionプロシージャーで作成するのはなぜでしょうか? subプロシージャーで作らない意味はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

参照先のサンプルなら、Function にする必要はないですね。Subでも同じ結果です。 ただ、戻り値を必要としない処理でも、Functionにする意味としては、 1.マクロの「プロシージャの実行」から呼び出せるのは Function のみなので、マクロから呼び出したいときは、Function にする。 2.フォームなどのオブジェクトのイベントプロパティに設定するときに、Functionなら設定できるがSubは設定できない。 例えば、標準モジュールに下記のFunction を作成しておいて、 Public Function MyName()   MsgBox Screen.ActiveControl.Name & "をクリックしました。" End Function コマンドボタンの「クリック時」プロパティ欄に、 =MyName() と設定すると、コマンドボタンをクリックするとメッセージボックスにコマンドボタン名が表示されます。

kjrweugdbyu
質問者

お礼

やはり例の場合は、subでもFunctionでもかわらないのですか。 「マクロの「プロシージャの実行」から呼び出せる」 というのは、 アクセスの テーブル クエリ レポート フォーム マクロ の「マクロ」の事を言ってますか? まだまだ不慣れなもので、 マクロとVBAの違いがよくわかっていませんのです。 フォームにコマンドボタンを設置して、 「クリック時」プロパティ欄に、=MyName()をやってたところ、 サンプル通りになりました。 試しに、 Public Sub MyName() MsgBox Screen.ActiveControl.Name & "をクリックしました。" End Sub にしてみたところ、 「イベントプロパティに指定した式クリック時でエラーが発生しました: 指定した式に、Microsoft Office Access が見つけることが出来ない関数名が含まれています。」 となりました。 だから、Functionでないとダメなのですね。納得です。ありがとうございました。

関連するQ&A

専門家に質問してみよう