• 締切済み

フォームとモジュール

フォームで指定したデータを モジュールに渡し、その結果を フォームに反映させる処理を作成すると したら、どのようなVBソースを書けば良いでしょうか? 処理の流れ、方法は以下の通りとなります。 **フォーム*************************** (1):検索する年、月を画面から指定 (6):検索フラグ判定   フラグが"1"…   (5)で取得したレコードセットの内容を   画面に表示する   フラグが"0"…エラーを表示 ***モジュール*************************** (2):DB接続 (3):(1)の年、月から、モジュール内関数を使用し、   月の最終日を取得 (4):検索用SQL発行((1)と(3)の年月を使用) (5):検索データ取得判定   (4)の対象データ(レコードセット)が有…   検索フラグを"1"にする   レコードセットの内容は保存する   (4)の対象データ(レコードセット)が無…   検索フラグを"0"にする

みんなの回答

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

>モジュールで行う処理はサブルーチンとして >扱いたかったのです。 >そうすれば、各イベント毎に同じプログラムを >書く手間がはぶけると思いまして。 >一般的にはモジュールには書かないんですか? そういうことなら話はわかりますが、 「フォームとモジュールで変数をやり取り」 みたいに書かれていたのでどうしてかな?と思ったのです。 サブルーチンということなら、フォームの方でそのサブルーチン(関数)を呼び出すので、変数をその関数に渡すとは言いますが、あんまりモジュールに変数を渡すという言い方はしないんですけどね。 ちなみに、私は、そのサブルーチンが特定のフォームでしか使われないなら、フォームモジュールに書きます。(標準モジュールには書きません。) 変数についてもそのフォームでしか使わないなら、そのフォームの宣言部にPrivateで宣言します。 標準モジュールにPublicで使用するのは、基本的には複数のフォーム(やモジュール)で呼び出すサブルーチンとしています。

すると、全ての回答が全文表示されます。
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

再びmaruru01です。 例えば、その標準モジュールの宣言部に、 Public FindYear As Long Public FindMonth As Long Public flagFind As Boolean と宣言しておいて、 フォームの方で、 FindYear = 10 FindMonth = 17 とか代入しておき、 標準モジュールの関数に、 最終日 = 最終日取得関数(FindYear, FindMonth) とか渡せばいいわけです。 この時、関数内で引数として渡した値に変更を加えて、それを反映させたいなら、ByRef(参照渡し)にして、反映させたくないなら、ByVal(値渡し)にすればいいです。 引数を参照するだけなら(普通はこのパターンでしょうが)、どっちでも構いません。(処理スピードが微妙に違うようですが。) ちなみに、関数の引数にどちらもつけないと、自動的にByRefになります。 あとは、モジュールの方で、 flagFind = 1 とか代入して、フォームの方で、 If flagFind = 1 Then みたいに参照すればいいですね。 ところで、最終日を取得する関数とかを標準モジュールに書くのはいいとして、何故DBの接続とか、検索用SQL発行とかをわざわざ標準モジュールで行うのでしょうか。 フォームの適当なイベントで行ってはまずいのでしょうか。

usi-iti
質問者

お礼

回答ありがとうございます。 実践してみます。 >ところで、最終日を取得する関数とかを標準モジュールに書くのはいいとして、何故DBの接続とか、検索用SQL発行とかをわざわざ標準モジュールで行うのでしょうか。 モジュールで行う処理はサブルーチンとして 扱いたかったのです。 そうすれば、各イベント毎に同じプログラムを 書く手間がはぶけると思いまして。 一般的にはモジュールには書かないんですか?

すると、全ての回答が全文表示されます。
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 標準モジュールを用意して、そこにPublicで変数を宣言すれば、プロジェクトのどこからでも参照出来ますが。 ところで、その"モジュール"って何モジュール? 標準モジュールなら、そこの宣言部にPublicで宣言しておけばいいと思いますが。

usi-iti
質問者

お礼

回答ありがとうございます。 フォーム⇔モジュール間で 変数のやりとりをするには byvalやbyrefなどが必要になると思うのですが、 MSDNが壊れていまして、コーディング方法が よく分からないので質問した訳です。 具体的なコーディングを教えて頂ければ幸いです。 使用モジュールは、標準モジュールです。

すると、全ての回答が全文表示されます。

関連するQ&A