重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

エクセルのVBAでユーザーフォームに作ったテキストボックスに入力した値を、コマンドボタンによる「実行」とともに別に作った標準モジュールの変数として代入するにはどうすれば良いでしょうか?

具体的な流れは、

マクロ実行
 ↓
ユーザーフォーム出現
 ↓
テキストボックスに数字を代入→「実行」
 ↓
変数を代入された標準モジュールによる処理完了

というものです。

ご教授お待ちしております。

A 回答 (2件)

変数が一つであれば、インプットボックスを使うほうが簡単なのですが、


ユーザーフォームを使いたい事情が何かおありでしょうか?

さてさて。
色んなやり方が考えられますが・・

(おそらく)一番解り易い手段としては、
変数を標準モジュールで「Public宣言」してしまうやり方だと思います。

極々簡単なサンプルとして、
標準モジュールに

Public PubNum As Long  ' パブリック変数の宣言(今回は長整数型)

Sub sample()
    UserForm1.Show  ' ユーザーフォーム表示

    MsgBox PubNum   ' 処理
End Sub

ユーザーフォーム(UserForm1)に
テキストボックス(TextBox1)とコマンドボタン(CommandButton1)を配置し、
コマンドボタンのクリック時イベントに

Private Sub CommandButton1_Click()
    PubNum = TextBox1.Value  ' パブリック変数にテキストボックスの値を代入

    Me.Hide  ' ユーザーフォームを閉じる
End Sub

これらをそれぞれ書いてやります。



「パブリック変数」についての詳細は別途お調べ下さいませ。
    • good
    • 0
この回答へのお礼

Public変数、大変参考になりました!無事、所望のコードを組むことができました。
ありがとうございました!!

お礼日時:2013/06/12 22:37

例えばユーザーフォームを「残したまま」なら、わざわざ「渡す」ことを考えなくても「直接取りに行けば」良いという考え方もあります。



ユーザーフォーム:
private sub CommandButton1_Click()
module1.macro1
’参考:標準モジュールが1個しかなければmacro1だけでもよい
end sub


標準モジュール(Module1)
sub macro1()
msgbox Userform1.textbox1
end sub



#補足
テキストボックスに数字を記入後、「ユーザーフォームに配置したコマンドボタンをクリックして」「標準モジュールのマクロを実行する」という段取りを設計していますね。
ご質問で説明がヌケている点としては、標準モジュールの実行「途中」と実行後に、それまで使ってたユーザーフォームをどうしたいのか不明瞭です。
ユーザーフォームが開いた状態に復帰したいのか、マクロ実行後にユーザーフォームも終了しちゃっていいのか、そもそも標準モジュールマクロを実行する「前」にユーザーフォームは閉じておきたいとか。

状況に応じて、適切に方法を組み合わせて応用してみて下さい。
    • good
    • 0
この回答へのお礼

参考になりました、ありがとうございました!

お礼日時:2013/06/15 00:00

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