• ベストアンサー

EXCELのVBAについて

エクセルのVBAでユーザーフォームに作ったテキストボックスに入力した値を、コマンドボタンによる「実行」とともに別に作った標準モジュールの変数として代入するにはどうすれば良いでしょうか? 具体的な流れは、 マクロ実行  ↓ ユーザーフォーム出現  ↓ テキストボックスに数字を代入→「実行」  ↓ 変数を代入された標準モジュールによる処理完了 というものです。 ご教授お待ちしております。

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

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

変数が一つであれば、インプットボックスを使うほうが簡単なのですが、 ユーザーフォームを使いたい事情が何かおありでしょうか? さてさて。 色んなやり方が考えられますが・・ (おそらく)一番解り易い手段としては、 変数を標準モジュールで「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 これらをそれぞれ書いてやります。 「パブリック変数」についての詳細は別途お調べ下さいませ。

Timper1912
質問者

お礼

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

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

例えばユーザーフォームを「残したまま」なら、わざわざ「渡す」ことを考えなくても「直接取りに行けば」良いという考え方もあります。 ユーザーフォーム: private sub CommandButton1_Click() module1.macro1 ’参考:標準モジュールが1個しかなければmacro1だけでもよい end sub 標準モジュール(Module1) sub macro1() msgbox Userform1.textbox1 end sub #補足 テキストボックスに数字を記入後、「ユーザーフォームに配置したコマンドボタンをクリックして」「標準モジュールのマクロを実行する」という段取りを設計していますね。 ご質問で説明がヌケている点としては、標準モジュールの実行「途中」と実行後に、それまで使ってたユーザーフォームをどうしたいのか不明瞭です。 ユーザーフォームが開いた状態に復帰したいのか、マクロ実行後にユーザーフォームも終了しちゃっていいのか、そもそも標準モジュールマクロを実行する「前」にユーザーフォームは閉じておきたいとか。 状況に応じて、適切に方法を組み合わせて応用してみて下さい。

Timper1912
質問者

お礼

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

関連するQ&A

専門家に質問してみよう