• 締切済み

Accessのフォームとモジュールについて

AccessVBA初心者です。 最近ツールを作り始めたのですが、フォームのファンクション(クリックなど)ごとの処理については例えば、フォームのボタンとかラジオボタンなどと結びつけてVBAを記述します。しかし、先輩などのツールを見るとモジュールにも記述している場合があるのですが、モジュールにはどういったことを記述して、どうフォーム側から呼び出すような仕組みなのでしょうか? 漠然とした質問で申し訳ございませんが、一般論でよいので教えてください。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。Wendy02です。 今ままで回答したものをチェックしていたら、残っていましたので、回答をつけておきます。 >今ひとつ標準モジュールとプロシージャの違いが解説などを読んでもわからないのですが、お時間あったら教えてください。 それぞれの違いというのは、Accessの場合は、あまり、その違いをはっきりと感じないかもしれませんね。簡単に言うと、マクロでこなせない細かい部分をプロシージャが補っているような気がします。それから、標準モジュールというのは、Applicationに直結していますから、共有できるということですね。つまり、コントロール(フォーム)を背負っていないので、純粋にコードだけを使えるということです。 ---------------------------------------------- 私の個人的な他人の作ったAccess VBAのコードの印象 私は、Excel VBAを中心に書いていますが、AccessのVBAの全体のレベルの高さには、目を見張るものがあります。明らかに、全体的にワンランク上のコードです。それは、反面、むつかしいということを物語っているのかもしれませんね。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 モジュールというのは、標準モジュールのことですよね。フォームには、フォームモジュールがあります。呼び出しは、単に、Call するだけでよいと思います。標準モジュールのプロシージャ側に、Public ステートメントをプロシージャの前に付けて、プロシージャ名だけで呼び出すというのはあまりしません。 Call プロシージャ名 私のコードを見てみると、内容的には、Accessに付随いていない独立した内容になっているものもありますね。例えば、Excelにデータを出力し、ピボットテーブルを作成するとか。 一般的なことですが、なぜ、標準モジュールを使うかというと、主に使用するメモリの分散化を考えるからです。ひとつのフォーム・モジュールなどに集中させると、その分、ひとつのフォームにメモリを抱えてしまいます。呼び出して使用する時にだけしか、プロシージャは必要ありません。 もうひとつは、Call が面倒になります。標準モジュールの場合、モジュール名を書く必要がありません。モジュールがいくつになっても、プロシージャ名だけで済みます。 他のフォームなどでも使いたい時、汎用性のあるサブルーチンで引数を取って、同一プロシージャでも、その引数によって、別の働きをさせることも出来ます。これは、ユーザー定義関数でも同じです。 次に、ユーザー定義関数は、本来は、組み込み関数にない複雑なものは、どうしても必要になってきます。また、Excelの特殊な関数をAccessに使用したいときなども、Excelのオートメーション・オブジェクトを生成して、標準モジュールから利用します。 ところで、#1さんの、GoSub ~ Return というのは、GoSub ~ Return というのは、構造化できないBasic の書き方で、VBAにも残っていますが、同一プロシージャ内に、サブルーチンを置く方法です。 もし、ご質問者さんが、標準モジュールのことを指しているのでしたら、それは、単に、サブルーチン・プロシージャが仕事を終われば、戻ってきます。また、条件によって、途中でプロシージャーを終えるなら、End ステートメントで終了させます。 私は、Access は、あまり詳しいわけではありませんが、一般的に思いつく範囲を挙げてみました。

hashi33
質問者

補足

ありがとうございます。 今ひとつ標準モジュールとプロシージャの違いが解説などを読んでもわからないのですが、お時間あったら教えてください。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

フォーム内のものはそのフォーム専用のVBA モジュールのは複数のフォーム及びマクロに使用できるVBA 共通化できるものはモジュールにおいて呼び出す用にした方が便利です。 通常は Subの付いたものは、Gosub~Return Functionの付いたものはユーザー定義関数として使用

hashi33
質問者

お礼

ありがとうございます。次にツールを作るときはぜひ使ってみます。

関連するQ&A

  • Access VBA標準モジュールについてです。

    Access VBA標準モジュールについてです。 現在、仕事上必要にかられAccessVBAを勉強中の初心者です。初歩的な質問で申し訳ありませんが、ご存知の方教えて下さい。 フォーム上のコマンドボタンを押した時に標準モジュールを作動させたいのですが、そんな方法はありますか?【クラスモジュールについての本は沢山あって何とか理解できつつありますが、標準モジュールに関しての記述があまり無い気がします。】 宜しくお願いします。

  • VBのフォームモジュールと標準モジュールの使い分け

    VBのフォームモジュールと標準モジュールの使い分けが今一つわかっていません。 フォームモジュールとは、フォーム(画面)上で起こったイベント(例えば、ボタンをクリックした時とか、ユーザーが行を選択したりだとか)の処理を、記述するところと解釈しています。 標準モジュールは、フォームが2つ以上あって、その2つが共通する処理(関数)などを、記述したり、フォームが1つでも、同じ処理を繰り返す場合、その処理を標準モジュールに書いたり・・・・という解釈をしています。 あってますでしょうか? フォームが一つしかない場合、もしくは2つあっても、あまり共通する処理がない場合、なんかは標準モジュールはあまり使わないのでしょうか? それとも、フォームが1つとかでも、今後のメンテの事など考慮して、標準モジュールを作ってそこにグローバル変数なんかで処理を書いた方がよいのでしょうか? どなたか、教えてくださいませんか? いろいろBBSなどで見てみるんですが、いろいろ書いてあって、どれが理想か わかりません。よろしくお願いいたします。

  • モジュールからフォームのボタンをクリックするには?

    おせわになります。 既存のフォームにあるボタンをモジュールからクリック(起動)することは可能でしょうか。 全てをモジュールに書き換えるのは面倒ので、既存のVBAを利用したいと考えています

  • フォームモジュールが作られない

    アクセスです。 新規でフォーム1を作成し、何もしないで(いじらないで)保存し、 VBE画面でフォーム1のForm_Loadイベントにコードを記述しようと思っても、  画像のようにフォームモジュールがありません。 フォームのデザインビューから適当に何かのイベントプロシージャーのボタンを押せば、 フォームモジュールが生成されます。 これは仕様でしょうか? エクセルは最初からシートモジュールやブックのモジュールがありますよね。

  • アクセスで「モジュールがありません」となってしまいます

    ACCESS2000を使用しています。 メニュー用のフォームに、データ照会用のフォームを 呼び出すコマンドボタンを追加し、フォームビューに切り替え 試しにクリックしていみたら実行時えら'2001';となりました。 どうみても記述に間違いはないとおもわれるのですが、そうこう しているうちに」ほかのイベントプロシージャを設定してある コマンドボタンをクリックすると「モジュールがありません」 (こうなる前までは正常に動作していました)となって動作 しなかったり、照会用のフォームにいたってはデザインビューで も開かなくなってしまいました。 元に戻すことはできるでしょうか? 助けてください。

  • Accessでサブフォームのボタンクリックイベントをメインフォームで処理したい。

     表題の件ですが、サブフォームにボタンを配置しています。 そのボタンをクリック後の処理をメインフォーム側に記述したい のですがどのようにすれば可能でしょうか。  よろしくお願いします。

  • VBA 標準モジュールとフォーム

    ある標準モジュール内で生成した変数の値をフォームのコマンドボタンをクリックしたら表示されるプログラムはどうやってつくるのですか? 標準モジュール sub test() dim a as integer dim b as integer dim sum as string a=5 b=1 sum=a+b End sub フォームのコマンドボタンクリック Sub CommandButton1_Click() MsgBox sum End Sub 標準モジュールで計算した答えがフォームのコマンドボタンをクリックしたら答え6が表示されるようにしたいのですが、どうしたらできますか?

  • accessのフォームを空にしたい

    テーブルと結びついたフォームがあります。 ボタンを押すと、ある処理をします。 その処理がエラーだった場合、フォームを空にしたいと思っています。 どうすればいいのでしょうか? マクロを使った場合、条件抽出でありえないデータをすればいいと思います。 しかし、今回はVBAを使って作っています。 まだVBAがよくわからないので、どうしていいかわかりません。 よろしくお願いします。

  • VBAProjectのモジュール存在チェック

    VBAProjectに、「テスト」というモジュール が存在すれば、メッセージ「テストモジュールは 存在しています」 という、処理をエクセルVBAで記述したいです。 上記の処理はVBAで記述することはできるの でしょうか?

  • VBA 標準モジュールとフォーム (続き)

    先ほど、同じ質問タイトルで質問させていただいたものです。この場合どうなりますか? モジュールでの変数file_nameをフォームのボタンをクリックしたら"text.xls"が表示されるようにしたいです。 (イメージとしては、エクセルのsheet1にコマンドボタンがあってクリックするとフォームが立ち上がってフォームのコマンドボタンをクリックすると"test.xls"が表示される) モジュール Private Sub CommandButton1_Click() ←エクセルsheet1にボタンがある   dim file_name as string file_name="test.xls"   UserForm1.Show End Sub フォーム(UserForm1) Sub CommandButton1_Click() ←フォームにボタンがある MsgBox file_name End Sub

専門家に質問してみよう