プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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
'-------------------------------------

以上。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/03/17 14:37

変数は、その通用範囲(スコープ)によって局所(ローカル)変数、広域(グローバル)変数とに大別されます。


プロシージャ内で宣言された変数は、プロシージャ内でしか通用しません。
また、フォームモジュールの冒頭で宣言された変数はそのモジュール内でしか通用しません。
これに対し、標準モジュールで Public という宣言子を使って宣言した変数は広域に通用します。
フォームモジュールでもプロシージャでも、かかる広域変数は参照し利用できます。
通常、このような広域変数の宣言を担当する標準モジュールは、[広域変数.BAS]などの名称を付けます。
もちろん、[グローバル.BAS]でも何でも構いません。

さて、広域変数を宣言する標準モジュールを追加するとプロジェクトウインドウは次のようになります。

標準モジュール
 |
 +-- Module1(Module1)

これじゃ、広域変数の宣言を担当している標準モジュールとは視認しづらいです。
そこで、

プロパティ-モジュール名=広域変数

と設定します。

標準モジュール
 |
 +-- 広域変数(広域変数)

この標準モジュールを保存すると表示は次のように変わります。

標準モジュール
 |
 +-- 広域変数(広域変数.bas)

この手続き全般を、これは示唆しています。
    • good
    • 0

標準モジュール


 |
 +-- 広域変数(広域変数.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)は初めて聞く言葉です。
よろしくお願いします。

補足日時:2008/02/29 17:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!