• ベストアンサー

Excel2003 VBAでフォーム渡し

Excel2003 VBAのフォームを標準モジュールに渡してコントロールできますか? フォームのコードから、標準モジュールにフォームを引数で渡して、操作したいと思っています。 フォームの操作で同じ処理が発生するので、標準モジュールで共通に使いたいのですが、思い通りにいきません。 ネットで調べたりしましたが、解決できずにこちらに質問させて頂きました。 よい方法をご存知の方がいらっしゃましたら、ご教授ください。 よろしくお願い致します。

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

  • ベストアンサー
noname#250246
noname#250246
回答No.3

あってますよ、その考え方で(^ ^) それなら、こんな感じでいかがでしょう? Private Sub CommandButton1_Click()   標準 UserForm1 End Sub Sub 標準(フォーム As UserForm)   フォーム.TextBox1 = "成功" End Sub 「As UserForm」の部分は「As Object」でも良いですし、面倒なら型を指定せずにVariantとして使っても良いですね。

pao5
質問者

お礼

Buttai_4Percent 様 再々度、教えて頂きありがとうございます。 うまく、標準モジュールへのフォームの引渡しができました。

その他の回答 (2)

noname#250246
noname#250246
回答No.2

そういうことでしたか(^_^; それなら同じ形でぷろしーじゃ内の MsgBox sss を UserForm1.TextBox1 = sss のようにすれば、標準モジュールからもいじれますよ。 フォームが開いていることが前提ですけど。 TextBox1は、cellsやRangeと同じような物で、シートをまたぐ時は「Worksheets(1).Range("A1")」のようにシートも指定しますよね。 あれと同じノリです。

pao5
質問者

お礼

Buttai_4Percent 様 再回答ありがとうございます。 UserForm1.のところも、標準モジュールに引数として渡せないかと、調べていました。 たぶん、フォームの名前だけ渡してもだめで、object型とかを使わないといけないのかなと、なんとなく思っていましたが、調べきれませんでした。 頂いたご回答は参考にさせて頂いています。

noname#250246
noname#250246
回答No.1

フォーム→プロシージャで良いんですよね? Subプロシージャに引数を設定することで可能ですよ。 Private Sub CommandButton1_Click()    メッセージ表示 ("成功") End Sub Sub メッセージ表示(sss As String)    MsgBox sss End Sub これだとフォーム上のボタンを押すことで、プロシージャ「メッセージ表示」に「成功」という文字列を引数として渡し、プロシージャ上でメッセージボックスを実行すると言う形になります。 今回は引数の型を文字列の「String」としましたけど、「Long」など他の型も指定できますし、省けば「Variant」として扱われます。 他にはグローバル変数を使うとか、シート上のセルに一度記入してそれを読み込ませるとかありますね。 逆にプロシージャからフォームへ引数は渡せませんから、その場合はこの二つの方法になると思います。

pao5
質問者

お礼

ありがとうございます。 標準モジュールから、フォームのテキストボックスを操作したいと思っていたので、教えて頂いた内容とは少々異なりますが、今後の参考にさせて頂きます。

関連するQ&A