VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2005/09/16(Fri) 15:42
投稿者魔界の仮面弁士
Eメール
URL
タイトルRe:VBAで「型が一致しません」

> 「どこそこの」コントロールか
> 「どのシートの」セルか
> 「どのブックの」「どのシートの」か

これらは、Excelのグローバルオブジェクトに起因する問題であって、
今回の問題とは、別の内容だったりします。


> > Private Sub Test(TxtBox As MSForms.TextBox)
> で、問題は省略したときエラーにせず
> 不審な動作になること(これもまああたりまえなのかも)

うーん。不審ですか。

個人的には、言語仕様どおりの動作だと思っているのですが、
確かに、ヘルプの記載はわかりにくい & 見つけにくいので、
そう思われても仕方ないかも知れませんね。(^^;


で、少し説明を加えておきますと。

Excelの場合、『コントロール ツール ボックス』に含まれるテキストボックスとは別に、
『図形描画』ツールバーに含まれる、全く別のテキストボックスがありますよね。

これらは、前者が MSForms.TextBox 、後者が Excel.TextBox というオブジェクトとなります。
両者は型名こそ似ていますが、全く異なるオブジェクトなので、今回は型エラーになったわけです。


なお、単に TextBox とだけ書いた場合に、MSForms.TextBox になるか、Excel.TextBox になるかは、
『参照設定』の優先順位によって決定されます。リストの上方に位置している物が優先されるのです。
(この辺りの動作仕様は、言語の説明部だけでなく、「参照設定」画面のヘルプにも少し書かれています)

そのため、単に TextBox と書いた時には、Excel.TextBox の意味となっていたわけです。

ちなみに、この辺りの動作は、VBA でも VB6 でも同様です。
VB6 で単に TextBox と書いた場合は、参照設定優先順により、VB.TextBox 型と解釈されるのですが、
これに Excel.TextBox や MSForms.TextBox を代入した場合は、やはり「型が一致しません」エラーと
なります。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -