- ベストアンサー
Excel2003 VBAでフォーム渡し
Excel2003 VBAのフォームを標準モジュールに渡してコントロールできますか? フォームのコードから、標準モジュールにフォームを引数で渡して、操作したいと思っています。 フォームの操作で同じ処理が発生するので、標準モジュールで共通に使いたいのですが、思い通りにいきません。 ネットで調べたりしましたが、解決できずにこちらに質問させて頂きました。 よい方法をご存知の方がいらっしゃましたら、ご教授ください。 よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
あってますよ、その考え方で(^ ^) それなら、こんな感じでいかがでしょう? Private Sub CommandButton1_Click() 標準 UserForm1 End Sub Sub 標準(フォーム As UserForm) フォーム.TextBox1 = "成功" End Sub 「As UserForm」の部分は「As Object」でも良いですし、面倒なら型を指定せずにVariantとして使っても良いですね。
その他の回答 (2)
そういうことでしたか(^_^; それなら同じ形でぷろしーじゃ内の MsgBox sss を UserForm1.TextBox1 = sss のようにすれば、標準モジュールからもいじれますよ。 フォームが開いていることが前提ですけど。 TextBox1は、cellsやRangeと同じような物で、シートをまたぐ時は「Worksheets(1).Range("A1")」のようにシートも指定しますよね。 あれと同じノリです。
お礼
Buttai_4Percent 様 再回答ありがとうございます。 UserForm1.のところも、標準モジュールに引数として渡せないかと、調べていました。 たぶん、フォームの名前だけ渡してもだめで、object型とかを使わないといけないのかなと、なんとなく思っていましたが、調べきれませんでした。 頂いたご回答は参考にさせて頂いています。
フォーム→プロシージャで良いんですよね? Subプロシージャに引数を設定することで可能ですよ。 Private Sub CommandButton1_Click() メッセージ表示 ("成功") End Sub Sub メッセージ表示(sss As String) MsgBox sss End Sub これだとフォーム上のボタンを押すことで、プロシージャ「メッセージ表示」に「成功」という文字列を引数として渡し、プロシージャ上でメッセージボックスを実行すると言う形になります。 今回は引数の型を文字列の「String」としましたけど、「Long」など他の型も指定できますし、省けば「Variant」として扱われます。 他にはグローバル変数を使うとか、シート上のセルに一度記入してそれを読み込ませるとかありますね。 逆にプロシージャからフォームへ引数は渡せませんから、その場合はこの二つの方法になると思います。
お礼
ありがとうございます。 標準モジュールから、フォームのテキストボックスを操作したいと思っていたので、教えて頂いた内容とは少々異なりますが、今後の参考にさせて頂きます。
お礼
Buttai_4Percent 様 再々度、教えて頂きありがとうございます。 うまく、標準モジュールへのフォームの引渡しができました。