電子書籍の厳選無料作品が豊富!

意味不明のバグで立ち往生しています。
原因追求のため下の状態までコードを削ったのですが
「MyUserControl1.F clss」の所で
「コンパイルエラー:ByRef引数の型が一致しません。」
というメッセージが出てきてしまいます。

'--------フォームモジュール Form1のコード----------
Private Sub Form_Load()
Dim clss(5) As New MyClass
MyUserControl1.F clss
End Sub

'--ユーザーコントロール MyUserControlのコード-----
Public Sub F(arg() As MyClass)

End Sub

'-------クラスモジュール MyClassのコード-----------
'(無し)


色々といじってみると
「ユーザーコントロールのメソッド」「クラス」「配列」
の条件が全て揃うと出てくるエラーみたいなんですが
対処方法がさっぱり解りません。

私はメニューからユーザーコントロールを見つけて
使えるのではと考え使ってみたレベルなので
どこかで根本的なミスを犯しているのかもしれませんが
何か気づくところがあればよろしくお願いします。

A 回答 (2件)

当方、暇になったので確認してみました。



ユーザー定義のクラスやコントロールのメソッドに、ユーザー定義のクラス、構造体、コントロールまたはその配列を渡せない場合があるというのは、前から知っていたのですが、どういう場合に当てはまるのかは、ちょっとよくわかりません。

解決策というか逃げですが、

'MyUserControl内
Public Sub F(args As Variant)
Dim arg() As MyClass
arg = args
End Sub

とすると、一度バリアント型に変換されるので、ワンテンポ遅れますが、その後の操作に支障はありません。

おそらくVB7では解決されていることだと思うのですが、VB6でも構文上間違っていないので、仕様なのかもしれません。

あまりお役に立てませんでした、すみません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
うまく動きました
このメンバ関数は初期処理の関数なのでちょっと位時間がかかっても問題無いんです。
それにしても、仕様ですか…さすがはマイクロソフト…

お礼日時:2002/05/31 10:09

確認事項



○ MyUserControl1はちゃんとForm1内に貼り付けられているか
○ いずれかのコントロールまたはクラスをインポートまたはエクスポートしようとしていないか
○ MyUserControl.Fメソッドの中には本当に何もコードはないのか
○ ツール→オプション→エラートラップをクラスモジュールで中断から、エラー発生時に中断に変えてみると、どこでエラーで止まるか

この回答への補足

○ MyUserControl1はちゃんとForm1内に貼り付けられているか
くっついてます。

○ いずれかのコントロールまたはクラスをインポートまたはエクスポートしようとしていないか
特に変わったことはしてないと思います。新たに標準EXEでプロジェクトを作り、クラスモジュールとユーザーコントロールを追加してFormにMyUserControl1を貼り付け上記のコードを記述しただけでもエラーが発生してしまいます。

○ MyUserControl.Fメソッドの中には本当に何もコードはないのか
全部消しました。

○ ツール→オプション→エラートラップをクラスモジュールで中断から、エラー発生時に中断に変えてみると、どこでエラーで止まるか
「Private Sub Fome_Load()」が黄色で反転していて、「MyUserControl1.F clss」の「clss」の部分が青で反転し、同じエラー内容で止まりました。

補足日時:2002/05/31 08:32
    • good
    • 0

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