• ベストアンサー

UserFormをサブルーチンに出来るか

頓珍漢な質問かもしれませんが、何分ご了承下さい。 標準モジュールで記述時、UserFormをサブルーチンとして呼び出す事は出来ないですか。 プログラムの途中に、複数項目を入力させたいのです。 InputBoxは一つしか入力させられない様だから、UserFormならと、思ったのですが。 Private付プロシージャは、同じモジュールのプロシージャからしか呼び出せないのでしょうか。 宜しくお願い致します。

noname#233045
noname#233045

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.1

>プログラムの途中に、複数項目を入力させたいのです。 この行の期待していることが読み取れません。 もう少し具体的な例を示して説明すれば コメントを得られるだろうと思います・ さて、... >Private付プロシージャは、 >同じモジュールのプロシージャからしか呼び出せないのでしょうか。 はい、呼び出せません。 Privateがその目的で使うコードですから。 '======= UserForm1 のコード Sub BBB()  MsgBox ("AAA") End Sub '======= Module1 のコード Sub test()  UserForm1.BBB End Sub といった記述をすれば、 標準モジュールのコードから Userform内のプロシジャーを呼び出せますが 一般にはやらないと思います。 私は、 formモジュール内では、イベントを拾うためのコードのみを 記述するようにしています。 '======= UserForm1 のコード Private Sub CommandButton1_Click()  kogehoge1 End Sub Private Sub OptionButton1_Click()  kogehoge2 End Sub '======= Module1 のコード Sub hogehoge1()  '諸々のコード1 End Sub Sub hogehoge2()  '諸々のコード2 End Sub といったカンジです。 これにより、 コードたちが1か所に集まるので読みやすくなると思っています。

noname#233045
質問者

お礼

有難うございまし

その他の回答 (1)

  • kkkkkm
  • ベストアンサー率65% (1614/2452)
回答No.2

標準モジュールのプロシージャからUserFormのテキストボックスの値を取り出したいということでしょうか。 でしたら(テキストボックスの名前がTextBox1なら) UserForm.TextBox1.Text が値になります。 また UserForm.Show でUserFormが表示されます。

noname#233045
質問者

お礼

有難うございます

関連するQ&A

  • UserFormの呼出について

    VBAで「出退勤時間管理」のプログラムを作っています。 各種の初期値、設定値をユーザーフォームで入力するのですが、 フォームを出すとき(ツールバーにマクロを登録しています。) 「アプリケーション定義またはオブジェクト定義のエラーです。」と出ます。 ツールバーに登録したマクロは、標準モジュールに記述しています。 試しに、別のエクセルファイルで簡単なマクロを組んでみました。 フォームにテキストボックスを貼り付け、標準モジュールにこれを呼び出すマクロを記述しました。 ---- 標準モジュール------ Private sub OpenForm() UserForm1.TextBox1.Text = "No Problem !!!" UserForm1.Show End sub ------------------------- これはうまくいきました。 全くエラーはでません。 同じように書いたコードが、片方はエラーが出ることが、さっぱりわかりません。 本体のコードは、結構多くファイルサイズが647kBになっています。 コードの量の制限とか、あるのでしょうか。 どなたか詳しい方、助言をお願い致します。

  • Excel VBA サブルーチン関連

    複数のマクロが標準モジュールに書かれているとします。(例:Module1~Module10) このモジュールを順番に実行するマクロを作成したいのですが、モジュールの名前を指定してサブルーチンコールは出来ないようです。 全部のモジュールを数珠つなぎにして1つのモジュールにまとめる方法は気が進みません。 モジュールの名前を指定してサブルーチンコールするようなスマートな方法はないでしょうか?

  • subプロシージャーは標準モジュールではなくフォームのコードを書く部分

    subプロシージャーは標準モジュールではなくフォームのコードを書く部分に書いても問題ないのでしょうか? エクセルにVBAでフォームを挿入し、 「Private Sub UserForm_Initialize()」 などのフォームのモジュールに、 Sub test() MsgBox "あああ" End Sub という標準モジュールに書くべきのsubプロシージャーを書いてもなにもエラーにならないし正常に動きます。 subプロシージャーは標準モジュールではなくフォームのコードを書く部分に書いても問題ないのでしょうか? それともエラーにならなくても標準モジュールに書いた方がいいですか?

  • ACCESSのVBAでのサブルーチンへの引数と戻り値について

    教えてください。 AccessのVBAで、標準モジュールに作ったサブルーチンに1つの引数を渡して、複数の戻り値(例えば「果物」を渡して、「りんご」「みかん」「いちご」をそれぞれ受け取る)を取得したいのですが、どのようにしたらよいのでしょうか? よろしくお願いします。

  • 【VBA】値の引渡しについて

    VBA初心者です。 VBAの勉強もかねて、今、【 標準モジュール 】と【 UserForm 】を用いて あるプログラムを作っています。 その中で、プロシージャ間をまたいで 『 値の受け渡し 』をしたいと思っています。 今回、質問をさせていただいたのは、その『 値の受け渡し 』が 「できる場合」と「できない場合」があるので、常にできるように その対応方法を教えていただきたく、今回投稿させていただきました。 ---------------------------------------------------------------- 今困っているパターンを例にあげると、 ユーザフォームの中に2つのボタン 「OK」ボタンと「キャンセル」ボタンが あるとします。 【 「キャンセル」ボタンがおされた場合には「終了する」 】という 仕組みにしたいと思っています。 そこで以下のようなプログラムを作ろうとしました。 ---------------------------------------------------------------- ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1) General部にPublic変数(以下「P変数」)を宣言する。      Public cancel as byte 2) 【標準モジュール】のプロシージャから【フォーム】の「Userform1」を表示させる。          Sub A処理()           Userform1.show           End sub   3) 【フォーム】のUserform1._CommandButton2に以下のように記述する。    (キャンセルボタンがクリックされた場合)          Private Sub CommandButton2_Click()       cancel = False       Unload Me       Exit Sub      End Sub 4) 【標準モジュール】のプロシージャの、一連の処理の最後に    以下のようにプログラムを記述する。          Sub A処理()           Userform1.show      ↓      ↓           if cancel = false then                exit sub           end if      End sub ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 1)~4)のようにして 「キャンセルがクリックされた場合、すべての処理を終了する。」 というようなプログラムを記述してみました。 すると、デバッグを使って、変数「cancel」の中身を見てみると 3)の段階で、その変数「cancel」に「false」値を格納したはずなのに、 プロシージャ間をまたいだことで 4)の段階では、変数「cancel」の中身が必ず「""」と 値が空値になってしまいます。 4)の段階でも、変数「cancel」の値が保持できる、 何かしらの方法はないでしょうか。 回答をよろしくお願いします。

  • UserFormから標準モジュールのIEを制御

    VBAで、標準モジュールにて呼び出したIEオブジェクトをUserForm上から 制御する方法があればご教授願います。 Sub SampleModule() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.yahoo.co.jp" UserForm1.Show ~~~~~~~~~~ Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Module1.SampleModule.objIE.Navigate "http://www.google.co.jp" ↑こういう感じの解をイメージしてます。 End Sub つまり、標準モジュールでセットしたオブジェクトを、呼び出した フォーム上から参照したいわけです。宜しくお願いします。

  • サブルーティンの使い方。

    サブルーティンの理解を深めるために、 階乗の計算をサブルーティンで行うプログラムを作りました。 自作のプログラムについて質問を二つしたいと思います。 1.一応、計算は出来るのですが、 定型的でないというか、無駄が多いというか、 何か違う気がするのです。 どこか変なところはありませんでしょうか? 2.エラーメッセージをどこにいれたらいいのかわかりません。 数字以外、(例えば文字)が入力されれば1が出力されるようにはしたのですが、 「これは数字ではありません」のようなエラーメッセージを出したいのです。 この場合はどこにどのように記述すればいいですか? 色々試してみたのですが、思い通りに動きませんでした。 みなさま、知恵をお貸しください。 ------------------------------------------- use strict; print "数字を入力してください。\n"; chomp( my $number = <STDIN> ); my $k_number = kaijo($number); print "入力された数字の階乗は$k_numberです。\n"; sub kaijo { my $number = shift @_; return undef if $number < 0; return 1 if $number == 0; my $kaijo = 1; for(my $i = $number; $i>1; $i--) { $kaijo *= $i; } return $kaijo; }

  • UserFormのSetFocus

    環境はExcel2002です (1)TextBox1に入力された数値を,区切りにする (2)TextBox2を入力不可の状態から入力可能な状態にする (3)TextBox2をSetFocusする という単純なプロシージャなのですが SetFocusされなくて困ってます UserFormタブオーダーの順番はTextBox1,TextBox2の順になっています 考えられる原因はなんでしょうか? ご教示願います 原因が不明でも回避する方法を教えていただいても結構です なんとしてもSetFocusしたい Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean) Me.TextBox1.Text = Format(TextBox1.Text, "#,##0") Me.TextBox2.Enabled = True Me.TextBox2.BackColor = &H80000005 '背景色(白色) Me.TextBox2.SetFocus End Sub

  • excel VBA 作成したUserFormにoptionButton

    excel VBA 作成したUserFormにoptionButtonを多数配置しています。このUserFormをワークシート上に再表示すとる、チェック項目に入力したチェックが消えてしまいます。消えない方法が解りません。 private sub OptionButton1_Click() Activesheet.Shapes("図形1").Visible=False '図形1表示 End sub private sub OptionButton1_Click() Activesheet.Shapes("図形1").Visible=True  '図形1非表示 End sub  同様な書式で数項目あります。 又、保存したワークシートを読み込んだ場合も同様に出来ないでしょうか。optionButtonのチェック項目が多数あります。チェック項目は図形を表示と非表示です。何方か良い方法がありましたら教えて頂けないでしょうか。宜しくお願いします。

  • EXECEL VBA コマンドボタンからのモジュール呼び出し 

    お世話になります. Excelのワークシート上にコマンドボタンを表示させ, そのコマンドボタンを押下することで, 作成したモジュールを実行させたく思っています. 下記記述のUserFormの****の部分に, 作成した標準モジュールを呼び出す記述が必要と考えておりますが, 上手くいきません. ちなみに標準モジュールは完成済みです. Private Sub CommandButton1_Click() ***************** End Sub 有識者の方,ご存知の方がいらっしゃいましたらご教授願います.

専門家に質問してみよう