• ベストアンサー

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

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

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

  • ベストアンサー
  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.1

>標準モジュールは、フォームが2つ以上あって、その2つが共通する処理(関数)などを、記述したり で良いと思いますよ。 逆に >フォームが1つでも、同じ処理を繰り返す場合 は、フォームモジュールの中に関数を作ってしまうので良いのでは? 参考になるかわかりませんが、私はDBとの接続や、起動時の全フォームのロード、定数やプロジェクトレベルでのグローバル変数の宣言等に使用しています。 そういえばMain関数は標準モジュールにしか書けませんでした…っけ? メッセージボックスを表示する際の関数を自分で定数とMsgBox()を組み合わせて使い勝手の良い物にする…というのもよくやります。

tariran
質問者

お礼

参考になりました ありがとうございました

tariran
質問者

補足

早々のレス大変うれしく思います。 質問なのですが、、、すみません。。 DBはオラクルを使用していて、フレキシブルグリッドというオブジェクトに、フォーム上のボタンを押した際に取得したデータを表示しているんですが、 そのボタンも2種類あり、それぞれ取得するデータも違うのですが、半分くらいは 2つとも同じデータを取得するんです。 この場合は、オラクルへ接続と、同じデータを取得する部分は標準モジュールに書いた方がよいのでしょうか? 現時点では、オラクルへの接続だけを標準モジュールに書いて、2つのボタンのイベントはそのままフォームモジュールに書いています。 なので同じデータを取得するところは2つ書いてしまってて。。 これってあんまりよくないのかな???っと。。。。 すみません、。こんな初歩的な質問で・・・・。 よろしくお願いいたします。

その他の回答 (2)

  • nakashi
  • ベストアンサー率51% (21/41)
回答No.3

私の個人的趣味では 標準モジュールはグローバルな定数定義と共通関数で使います。 グローバル変数は、標準モジュールは書きません とゆうか 使いません。 共通で使用する変数はクラスモジュールのプロパティにすます。

tariran
質問者

お礼

ありがとうございました。 参考になりました。

  • haporun
  • ベストアンサー率40% (230/562)
回答No.2

フォームモジュール内の関数には、密かにどのフォームから呼ばれたかを識別する引数が余分に渡されているので、使わない場合はオーバーヘッドがあります。 フォームモジュール内には、そのフォーム自身にアクセスすることのない関数は書かないほうがいいです。 Form1ってのはじつは、複数作ることができます。 そのときモジュールからForm1.Captionという書き方をすると、特定の1つにしかアクセスできません。 まぁ、今分からないなら、区別する必要もないってことです。 必要なときが来たら自然と分かると思います。

tariran
質問者

お礼

参考になりました ありがとうございました。

関連するQ&A

  • 標準モジュールについてなのですが

    すみません。教えてください(/_;)VB6にて理解できないことがあります。いくつものパスを標準モジュールに記述できると知り、早速見やすいプログラムにしようと思い、標準モジュールを追加しました。サンプルなどを調べ、Function Apath() as stringを理解しました。フォームの方にはpath = Apathって書いておけばいいと書かれていたのでその通りにしました。しかし、見に行ってはくれません(>_<)で、いろいろやってみてあることに気づきました。変数を宣言してたら、ダメでしてなかったらちゃんと見に行ってくれます。 Dim path as string,Dim Apath as string.Apathを消すと働いてくれます。宣言が間違っているのでしょうか?標準モジュールをこのような感じで利用するには何か重大なルールがあるのでしょうか?すいません、初心者すぎる質問で<(_ _)>しかし、聞かぬは一生の恥と思い質問しました(>_<)よろしくお願いいたします<(_ _)>

  • 標準モジュールが1から3までありますが?

    エクセルVBEの画面を開くと、標準モジュールの下にモジュールが1から3まであります。 使い分けのルールのようなものはあるのですか? マクロの自動記録をしたらモジュール3に記述されていたのですが、通常、 自分で標準モジュールをを記述するときはモジュール1に記述するものですか?

  • 標準モジュールにpublicで宣言するしかない?

    フォームモジュールと標準モジュールで同じ変数を使って値を行き来したい場合、 標準モジュールにpublicで宣言するしかないのでしょうか? 【フォームモジュール】 Private Sub cmd_コマンド0_Click() test = "aaa" Call 標準モジュールtest End Sub 【標準モジュール】 Public test As String Sub 標準モジュールtest() MsgBox test End Sub でいいのですか?

  • Publicステートメントと標準モジュールについて

    標準モジュールを挿入して、変数の前にPublicを宣言してあげると、 どのモジュールからも参照が可能になるのは、本を読んでよく分かったのですが、 「Function」などで関数プロシージャの定義を標準モジュールでする時に、 「Public」があると、なしでは、どういった効果がでるのでしょうか? 本には、ほとんどPublicが宣言されていました。 関数プロシージャを定義する場合は、Publicを付けなくても、 他のモジュール(例えばフォームなど)から参照可能ですよね? 今一、標準モジュールと関数定義、Public変数の関連がわかっていません。 良かったら、アドバイスお願いします。m(__)m

  • 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のフォームとモジュールについて

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

  • 標準モジュールを共通で使うには?

    いつもお世話になります。VB2005です。 ソリューションには最低1個のプロジェクトが存在します。それに複数個の標準モジュールを追加してプログラム全体を構成しています。 ここで、独立した複数個のソリューション(プロジェクト)をつくり、それぞれから共通に利用できる標準モジュールを利用することがあります。この標準モジュールに何か変更が生じたときは、それらを利用しているプロジェクト内へファイルコピーして、後日の不一致を防止しています。 過去の古いVBでは、特定のホルダーに標準モジュールを置いておくことで共用ができていたと記憶しています。ですから、ある編集中プロジェクト内の標準モジュールに変更があっても、他のプロジェヘクトへ自然に反映されていました。 VB2005においても何かの設定で同様のことが可能でしょうか? よろしくお願いします。

  • フォームのテキストボックスなどの変数名を標準モジュールから参照は可能か?

    フォームのテキストボックスなどの変数を標準モジュールの関数から参照する方法を教えてください。 お願いします。

  • フォームモジュール内に サブプロシージャー

    vbaでフォームモジュール内に Sub test() End Sub のように、サブプロシージャーを作るのはよくないですか? そのフォームモジュールに関係のあるサブプロシージャーの場合です。 サブプロシージャーは標準モジュールに作った方が良いのか、 わからないので教えてください。

  • VBからモジュールでなくワークシートに書かれたマクロをCALL

    はじめまして。 VB初心者です。 VBからExcelVBAで記述したマクロを呼び出したいのですが、 標準モジュールであれば、「Call xlApp.Run」でいけるのですが、 標準モジュールでなくワークシートに書かれたマクロをCALLするにはどうしたらよいのでしょうか? ご教授ください。よろしくお願いします。

専門家に質問してみよう