我想迭代成员的任何类在引用的图书馆就像是使用对象浏览器。怎么可以这样做使用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

如果您已经安装VB6 - 那么你可以尝试tlbinf32.dll。 AFAIR - 如果有班级数量得到任何类型库的信息 请参阅 http://support.microsoft.com/kb/224331

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top