• ベストアンサー

複数のフォーム間での変数宣言

VB6.0についての質問です。ひとつのプロジェクトの中に複数のフォームがあるとします。この中のある一つのフォームで変数 NUM を宣言し、何かの計算値を入れます。このNUMを値は保持したまま、他のフォームで利用することはできるのでしょうか? とりあえず全てのフォームのコードの先頭(プロシージャの外、Option Explicit下)に「Public NUM As Single」と宣言して挑戦してみたのですが、駄目でした。。よろしくお願いします。

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

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

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 '------------------------------------- 以上。

inst
質問者

お礼

遅くなり、大変申し訳ございませんでした。 サンプルソース示していただき、丁寧な解説ありがとうございます☆ 無事に解決しました。

その他の回答 (2)

noname#140971
noname#140971
回答No.3

変数は、その通用範囲(スコープ)によって局所(ローカル)変数、広域(グローバル)変数とに大別されます。 プロシージャ内で宣言された変数は、プロシージャ内でしか通用しません。 また、フォームモジュールの冒頭で宣言された変数はそのモジュール内でしか通用しません。 これに対し、標準モジュールで Public という宣言子を使って宣言した変数は広域に通用します。 フォームモジュールでもプロシージャでも、かかる広域変数は参照し利用できます。 通常、このような広域変数の宣言を担当する標準モジュールは、[広域変数.BAS]などの名称を付けます。 もちろん、[グローバル.BAS]でも何でも構いません。 さて、広域変数を宣言する標準モジュールを追加するとプロジェクトウインドウは次のようになります。 標準モジュール  |  +-- Module1(Module1) これじゃ、広域変数の宣言を担当している標準モジュールとは視認しづらいです。 そこで、 プロパティ-モジュール名=広域変数 と設定します。 標準モジュール  |  +-- 広域変数(広域変数) この標準モジュールを保存すると表示は次のように変わります。 標準モジュール  |  +-- 広域変数(広域変数.bas) この手続き全般を、これは示唆しています。

noname#140971
noname#140971
回答No.1

標準モジュール  |  +-- 広域変数(広域変数.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 これが一つの基本形です。

inst
質問者

補足

早速の回答、ありがとうございます。アドバイスを参考にして、 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)は初めて聞く言葉です。 よろしくお願いします。