繰り返し処理のオブジェクトのブラウザVBA
質問
いのに対して繰り返し処理を実行するよ員の任意のクラスを参照される図書館のようは、オブジェクトブラウザです。どのような方法で実現できるのVBAを使用?
解決 2
私は、私はちょうどそれをすることができ、マイクロソフトするから KBを見つけました。それはまた、同様にメンバーの詳細にわたる反復をカバーしています。
Private Sub ListClassesInAccess()
Dim TypeLibrary As TypeLibInfo
Dim ClassList As CoClasses
Dim i As Integer
Dim Path As String
Path = "C:\Program Files\Microsoft Office\OFFICE11\MSACC.OLB"
Set TypeLibrary = TypeLibInfoFromFile(Path)
Set ClassList = TypeLibrary.CoClasses
For i = 1 To ClassList.Count
MsgBox ClassList.Item(i).Name
Next
Set TypeLibrary = Nothing
Set ClassList = Nothing
End Sub
他のヒント
実際には、これを行う方法を文書化されていないが、可能です。あなたのコレクションのfor..Each構文を実装するために探しているなら、あなたは、次の操作を行うことができます:
Option Compare Database
Option Explicit
Public colT As New Collection
Public Function NewEnum() As IUnknown
Set NewEnum = colT.[_NewEnum]
End Function
Public Property Get NextItem() As IUnknown
Attribute NextItem.VB_UserMemId = -4
Attribute NextItem.VB_MemberFlags = "40"
Set NextItem = colT.[_NewEnum]
End Property
上記の属性の設定に注意してください。メモ帳で、上記のようにSaveAsTextと編集コードを使用する必要があります。その後、再インポートデバッグコマンドラインでloadfromTextを使用してコードを。あなたが上記の操作を行うならば、あなたは行くことができます:
Dim n As clstest1
Dim v As Variant
Set n = New clstest1
[ code here that adds to collection]
For Each v In n
Debug.Print v
Next
そして、あなたがコレクションのためにのために...それぞれ使用することを見ていない場合は、あなたの可能性/こともでき、セットアップ行くことによって、クラスのデフォルトプロパティます:
Public Property Get Item(Optional ndx As Integer = 1) As Variant
Attribute Item.VB_UserMemId = 0
Select Case ndx
Case 1: Item = Me.s1
Case 2: Item = Me.s2
Case 3: Item = Me.s3
End Select
End Property
Public Property Get count() As Integer
count = 3
End Property
次に、あなたが行くことができます:
Dim n As clstest1
Dim i As Integer
Set n = New clstest1
For i = 1 To n.count
Debug.Print n(i)
Next
しかし、あなたは自動的に内蔵の自動オブジェクトのコレクション(コンパイラオプションでこれをシリアライズする方法はありませんし、クラスの各メソッド/メンバーを追加することができますが、私は、各手続き持つ属性を持つコードを見てきましたどのように私は気づいていませんItem.VB_UserMemId = 1、次いで2、次いで3)。おそらく、より多くの知識を持つ人は)でジャンプすることができます。
ただし、上記が示すように、あなたは、コレクションのfor..eachを実装することができます。カスタムアイテムのプロパティを作成した場合、あなたはプロパティ/メソッドのそれぞれのインデックスを実装することができます。そして、上記が示すように、あなたも、あなたがデフォルトとして作成し、その項目のプロパティを設定することができます。私は、「オプション」に入れ、これさえます:
debug.print n
働くのでしょうか。
debug.print n.Item(1)
残念ながら、アクセスVBAに対応しておりません。きして新しいアカウントを作成独自の抽象化オブジェクトの階層る検査プロパティの値。ます。ることができるかもしれませんようこ:
http://msdn.microsoft.com/en-us/library/aa663065%28office.11%29.aspx
- あなたはtlbinf32.dllを試すことができます。 AFAIR - 任意のタイプライブラリの情報を取得するクラスの数を持っている場合 http://support.microsoft.com/kb/224331する
を参照してください。