一回も披露したことのない豆知識

こんにちは。
今回、WindowsXP SP2上のExcel2003 VBAを使ってツールを作成しているのですが、
以下のようなエラーが出て手が止まっています。
「コンパイル エラー:
 パブリック オブジェクト モジュールで定義されたユーザ定義型に限り、変数に割り当てることができ、実行時バインディングの関数に渡すことができます。」
というものです。

具体的な環境としまして、
標準モジュールにDefineTypeというモジュールを作成し、
Public Type Record
ID As Integer
Name As String
End Type
を定義しています。


これをクラスモジュールに作成したCClassから以下のように参照しています。

Private Detail As New Collection 'of Record

Private Sub Sub1()
  Dim rec As Record
  rec.ID = 3
  rec.Name = "おなまえ"
  Detail.Add rec
  ~~~~~~~~~~~~~~
End Sub

Public Sub CallSub1()
  Call Sub1
End Sub


そして、このクラスの中のPublicな関数であるCallSub1を
フォームモジュールから呼び出しているのですが、
Sub1 の Detail.Add がだめなようです。

・このエラーの意味
・どこがどうだめなのか
・どうすれば解決できるか

を、糸口でも構いませんのでご教授下さい。
よろしくお願いいたします。

A 回答 (1件)

ユーザ定義型はFor Eachで使えないらしく、Collectionに追加できないらしいです。


そこで代替案として、ユーザ定義型ではなくクラスを使用すればうまくいくようです。
    • good
    • 1

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報