1.シートからユーザーフォームを呼び出す。
2.シートからユーザーフォームへ値を渡す。
3.ユーザーフォームからシートへ値を返す。
この一連の処理を行いたいのですが。
TestSheet-----------
Dim oForm As TestForm
Set oForm = New TestForm
oForm.SetData("渡す値")
Call oForm.Show
Dim Result As String
'Result = oForm.GetResult
Set、GetメソッドはTestForm内に存在します。
しかし、ユーザーフォームでUnloadを行った時点でoFormが破棄されるらしく、Result = oForm.GetResultでエラーとなります。
変数とSet、Getメソッドを標準モジュールに記述すれば解決するのですが、スコープ範囲がこのシートとユーザコントロールに限定できないのでなるべく記述したくありません。
他にユーザフォームから値を受け取る方法はありませんでしょうか。
No.2ベストアンサー
- 回答日時:
こんにちは。
下記内容は一例です。
ユーザーフォーム内の処理で、
Unload Me
のように自フォームをUnloadしてしまうと、フォームのオブジェクトが破棄
されてしまうので、フォームを呼び出した側では、フォーム内のデータは
取得できなくなってしまいます。
Unloadの代わりに、ユーザーフォーム側で、
Me.Hide
のように、Hideメソッドを使用すれば、フォームが非表示になるだけで、
フォームのオブジェクト自体は破棄されずに、フォームを呼び出した側
に制御が戻ります。(※フォームは一見、終了したように見えます。)
ユーザーフォーム側で上記のようにしておいて、フォームを呼び出す側で、
'フォームを表示
UserForm1.Show (vbModal)
'フォーム上のデータ取得
Dim vDat As Variant
vDat = UserForm1.TextBox6.Value
'フォームを閉じる
Unload UserForm1
'取得したデータを表示
MsgBox "取得データ = " & vDat
のようにすれば、フォームを呼び出した側で、フォーム内のデータが取得
できると思います。
上記のように、フォームを閉じる処理は、フォームを呼び出した側に記述
します。
注)上記処理は、当方のExcel2000で確認してみた結果ですが、他の
バージョンのExcelで、同様に動作するかどうかは判りません。
もしも、上手く動作しなかった場合はすみません。
以上です。参考になれば幸いです。
成程、非表示ですか!これは思いつきませんでした。
試したところ、Excel2007でも問題なく実現できました。
誠に有難うございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 貼り付けた値が消えていく 以下はソースファイルの2番目のシートのB6から最終行を取得 ターゲットファ 2 2023/07/27 12:23
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 3個のfileのセルデータを1個のfileのセルに貼り付けるVBAコードですが。 1 2023/02/20 09:21
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAのユーザーフォームの...
-
ユーザーフォームを表示中にシ...
-
Hideについて(.NET)
-
Form_Load と Form_Activate の...
-
エクセルVBAのフォームを最...
-
ユーザーフォーム上に現在日時...
-
【VBAユーザーフォームで閉じる...
-
ユーザーフォームのラベルに時...
-
MSGBOXのフォント大きさ変更
-
コントロールの存在確認
-
Microsoft Formsの「個人情報や...
-
VBAでユーザーフォームを再表示...
-
フォームのテキストボックスな...
-
ACCESSのフォーム、開くんです...
-
アクセス2013 フォームが...
-
エクセルのチェックボックスの...
-
ExcelVBAのユーザーフォームでe...
-
ユーザーフォームのテキストボ...
-
クリックイベントなのに、2回ク...
-
フォームのアクティブと非アク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
クリックイベントなのに、2回ク...
-
ExcelVBAのユーザーフォームの...
-
ユーザーフォームのテキストボ...
-
Microsoft Formsの「個人情報や...
-
ユーザーフォーム上に現在日時...
-
Form_Load と Form_Activate の...
-
モーダルフォームとモードレス...
-
Excelにて、ユーザーフォームで...
-
VBAでユーザーフォームを再表示...
-
【VBAユーザーフォームで閉じる...
-
MSGBOXのフォント大きさ変更
-
VBA(エクセル)のユーザー...
-
Hideについて(.NET)
-
エクセルVBAのフォームを最...
-
コントロールの存在確認
-
ACCESSのフォーム、開くんです...
-
'ユーザーフォーム右上隅の[×...
-
フォームウィンドウを最前面に...
-
ユーザーフォームのラベルに時...
おすすめ情報