プロが教えるわが家の防犯対策術!

VBA初心者です.
ExcelVBAの同じプロジェクトの中に,FormでTextBox(仮にAAとします)を定義し,その後ModuleでAAを参照するプロシージャを書いてプログラムを実行するとAAについて"変数名が定義されていない"というエラーメッセージが出ます.同じプロジェクトの中で定義されたオブジェクトの名称(上の例でAA)は自動的には変数として定義されないのでしょうか.実行のさせ方か何かがが間違っているのでしょうか.対処方法を教えてください.

A 回答 (2件)

UserForm1.AA.Value = "abc"


S = UserForm1.AA.Value
等の様に「UserForm1.」も必要です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
UserForm1一つしかないので,親オブジェクトは不要だと考えたのが間違いでした.
教えて頂いたとおりで動作しました.

お礼日時:2016/04/30 17:56

すみません。

私は、ご質問の、おっしゃっている内容が理解できません。

Excel VBAという限定ですと、Form というのは、フォーム・コントロールのことだと思います。ところが、フォーム・コントロールには、TextBox はありません。フォーム・コントロールには、ダイヤログボックスで使う、テキストフィールドしかありません。

Access やVBで、フォームというものが、Excelでは、UserForm に該当し、Active X コントロール(OLEオブジェクト)というものですが、これらを操作する場所は、オブジェクト・モジュールと言って、UserFormモジュールは、同じブックのプロジェクトに書いたとしても、独立したオブジェクトになってしまい、他のモジュールからは、細かく定義してあげないと呼び出せません。こういう階層的な書き方、コンテナ型と読んでいます。

また、ExcelやWordには、オートシェイプ(の類)には、TextBox というものがありますから、そのどれを指しているのか、もう少し正確におっしゃっていただかないと、どういうものは、少なくとも、私などには分かりません。

もしかしたら、ご質問の文面だけで、解答が分かる方もいらっしゃるかとは思いますから、私の書いていることは、無視して一向に構いません。

通常は、標準モジュールで変数を入れてから、グローバル変数(とそう呼ばれている、単にPublic キーワードつけたモジュール変数)を付けて、値だけを、個別のオブジェクトモジュールの橋渡しにさせます。

>FormでTextBox(仮にAAとします)
オフジェクトそのものを変数に入れるという書き方をする人が、最近いますが、Class で、インスタンスにするならともかく、そのオブジェクトそのものを格納する必要はないと思います。テキストボックスでは、Text値(String型)を渡せば十分だと思います。

しかし、こうした言葉でいくら説明しても、もしかしたら理解できないのではないかと思います。VBAの質問で問題がある部分のコードを、明示していただいたほうが、答えは早く見いだせるような気がします。
    • good
    • 0
この回答へのお礼

ご回答有り難うございました.
いろいろご教示頂きましたこと感謝いたします.

お礼日時:2016/04/30 17:58

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