- ベストアンサー
複数のフォーム間での変数宣言
VB6.0についての質問です。ひとつのプロジェクトの中に複数のフォームがあるとします。この中のある一つのフォームで変数 NUM を宣言し、何かの計算値を入れます。このNUMを値は保持したまま、他のフォームで利用することはできるのでしょうか? とりあえず全てのフォームのコードの先頭(プロシージャの外、Option Explicit下)に「Public NUM As Single」と宣言して挑戦してみたのですが、駄目でした。。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No1さんがお忙しいようなので。。(^^;;; 変数の宣言は「標準モジュール」を追加してそこでせよ、ということです。 '------------------------------------ 標準モジュールの宣言セクション '------------------------------------ Option Explicit Public NUM As Long '------------------------------------ Form1 '------------------------------------ Private Sub Command1_Click() NUM = 1 Form2.Show End Sub '------------------------------------ Form2 '------------------------------------ Private Sub Form_Load() MsgBox NUM End Sub '------------------------------------- ●質問者のように、Form1で変数宣言したら Form2でそれを使うときには、変数の前に、Form1を付加すればOKです。 Form1で変数宣言した場合 '------------------------------------ Form1 (変更なし) '------------------------------------ Option Explicit Public NUM As Long Private Sub Command1_Click() NUM = 1 Form2.Show End Sub '------------------------------------ Form2 (変更あり) '------------------------------------ Private Sub Form_Load() MsgBox Form1.NUM '●変数の前に,Form1を付加する End Sub '------------------------------------- 以上。
その他の回答 (2)
変数は、その通用範囲(スコープ)によって局所(ローカル)変数、広域(グローバル)変数とに大別されます。 プロシージャ内で宣言された変数は、プロシージャ内でしか通用しません。 また、フォームモジュールの冒頭で宣言された変数はそのモジュール内でしか通用しません。 これに対し、標準モジュールで Public という宣言子を使って宣言した変数は広域に通用します。 フォームモジュールでもプロシージャでも、かかる広域変数は参照し利用できます。 通常、このような広域変数の宣言を担当する標準モジュールは、[広域変数.BAS]などの名称を付けます。 もちろん、[グローバル.BAS]でも何でも構いません。 さて、広域変数を宣言する標準モジュールを追加するとプロジェクトウインドウは次のようになります。 標準モジュール | +-- Module1(Module1) これじゃ、広域変数の宣言を担当している標準モジュールとは視認しづらいです。 そこで、 プロパティ-モジュール名=広域変数 と設定します。 標準モジュール | +-- 広域変数(広域変数) この標準モジュールを保存すると表示は次のように変わります。 標準モジュール | +-- 広域変数(広域変数.bas) この手続き全般を、これは示唆しています。
標準モジュール | +-- 広域変数(広域変数.bas) Option Explicit Public NUM As Long Form1モジュール Private Sub Command1_Click() NUM = 1 Form2.Show End Sub Form2モジュール Private Sub Form_Load() MsgBox NUM End Sub これが一つの基本形です。
補足
早速の回答、ありがとうございます。アドバイスを参考にして、 Form1に Option Explicit Public NUM As Long Private Sub Command1_Click() NUM = 1 Form2.Show End Sub Form2に Private Sub Form_Load() MsgBox NUM End Sub を記述してみましたが、コマンドボタンを押し、Form2を開くと「変数が定義されていません」というエラーが出てしまいます。 Form2に「Public NUM As Long」を記述し実行すると、メッセージボックスは表示されるのですが、値が"0"になってしまいます。 何か根本的に間違っている部分があるのでしょうか… 標準モジュール | +-- 広域変数(広域変数.bas) は何を表しているのですか?(広域変数.bas)は初めて聞く言葉です。 よろしくお願いします。
お礼
遅くなり、大変申し訳ございませんでした。 サンプルソース示していただき、丁寧な解説ありがとうございます☆ 無事に解決しました。