プロが教えるわが家の防犯対策術!

1つのForm上のコマンドボタンで別のFormを表示、そこで変数に値を入れ、そのFormを閉じ、元のFormでその変数を使いたいのですが、どうもうまくいきません。
実施したやり方は、一方のFormの宣言領域で、”Public abc As String”を宣言、両方のFormの(変数に値を入れた方と変数を使う方の)プロシージャーの宣言では引数として(abc As String)と記述しました。
因みに、両プロシージャーともイベントプロシージャーです。何か基本的なことができていないのだとは思いますが、どなたか教えていただけませんか?よろしくお願いします。

A 回答 (5件)

すでに何件か回答があがっていますので、少し変わった方法をご参考までに。



あまり使われませんが、Formにはtagというプロパティがあります。
これは「文字列形式であれば何でも格納できる」という、上手く使えば便利なプロパティです。

FormAからFormBを呼び出し、FormBで変更した値をFormA.tagにセットします。
ここでFormBをUnloadしてもFormA.tagの値は影響を受けないので自由に使えます。

複数の値を呼び出し元に戻してやる場合に、区切り文字(カンマなど)で連結した文字列をtagに格納し、呼び出し元で区切り文字でsplitして、複数の値を受け渡すという手法をよく使っています。
    • good
    • 2
この回答へのお礼

回答ありがとうございます。
確かに・・慣れれば非常に便利な気がします。
いちいちPublicで変数を宣言しなくてよいということですね。
それから、回答下さった皆さんにも、改めてお礼を言わせて頂きます。無事、解決しました。

お礼日時:2006/09/07 20:53

Form内でPublic宣言した変数は、そのFormが生きている間だけ有効です。


UnloadしたFormの変数にはアクセスできません。

Form1からForm2を開いて、Form2を閉じたときにForm2の変数をチェックするときに私が良く使う方法は、
[Form1]
Form1.Show vbModal
myValue = Form2.myValue
Unload Form2

[Form2]
Public myValue as Long

Private Sub Button1_Click()
Me.Hide
End Sub

つまり、Formを閉じるときにいきなりUnloadせずにHideしておき、
Formを呼び出した側がデータを取得後にUnloadするようにします。
    • good
    • 2
この回答へのお礼

回答ありがとうございます。
そもそもわたしは非表示にする方法しか知りませんでした。なるほど大変参考になりました。
ところで、FormをUnloadするのと非表示とするのでは、やはり動作の軽さが違うのでしょうか?

お礼日時:2006/09/07 08:18

フォームが開いている状態で


フォーム内でpublicで宣言してあれば
別フォームからでも「フォーム名.変数名」で参照
できますよ。
自分は標準モジュールでプロジェクト全体で宣言を
するのはあまり好きではないので(モジュール結合度の問題からして)
フォーム間でのデータ明け渡しはこれを使っています。
    • good
    • 4
この回答へのお礼

回答ありがとうございます。
なるほど、そういう方法もあるのですか・・
参考にさせて頂きます。

お礼日時:2006/09/07 07:57

標準モジュールを追加して,そこでジェネラルプロシージャで記載すると,プロジェクト内の全てのフォームで使用できるようになります。

    • good
    • 0
この回答へのお礼

回答ありがとうございます。早速やってみます。

お礼日時:2006/09/07 07:55

非常に基本的なことです。


変数の生存できる期間というものがあります。
また、変数の有効範囲(スコープ)というものもあります。

abcはpublicで宣言するのはいいのですが、
宣言したform(カレントモジュール)の中でしか有効になりません。

プロジェクト全体で有効にするには標準モジュール内で宣言して下さい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
早速やってみます。

お礼日時:2006/09/07 07:54

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A