gpt4 book ai didi

vba - 在 VBA 中遍历对象浏览器

转载 作者:行者123 更新时间:2023-12-04 21:54:59 27 4
gpt4 key购买 nike

我想遍历引用库中任何类的成员,就像使用对象浏览器一样。如何使用 VBA 完成此操作?

最佳答案

实际上,如何做到这一点是没有记录的,但是是可能的。如果您希望为集合实现 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

而且,如果您不希望将 for...each 用于集合,您可以/也可以通过以下方式设置类的默认属性:
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

但是,我不知道如何将类的每个方法/成员自动添加到内置对象集合中(无法使用编译器选项对其进行序列化,但我已经看到每个过程的代码都具有 Attribute Item.VB_UserMemId = 1,然后是 2,然后是 3)。也许有更多知识的人可以加入)。

但是,如上所示,您可以为集合实现 for..each。如果您创建自定义项属性,则可以为每个属性/方法实现索引。而且,如上所示,您甚至可以将您创建的项目属性设置为默认值。我输入了“可选”,因此甚至:
debug.print n

会工作,或者
debug.print n.Item(1)

关于vba - 在 VBA 中遍历对象浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1892039/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com