Jea*_*ett 11 collections vba interface-implementation
我正在尝试Collection在新类中扩展VBA 对象的功能并使该类成为继承者Collection,但该Implements Collection语句给出了以下错误:
Implements的接口不正确:方法名称中有下划线.
什么强调?!Add,Item,Remove,和Count用于文档中列出的唯一方法Collection.这四个都是无下划线的.
编辑:为了澄清,我正在创建一个名为UniformCollection(只接受所有相同类型的成员,受此方法启发).我希望它能够实现 Collection,所以a UniformCollection 是a Collection并且可以用来代替Collection调用其他对象的方法等.
我知道我必须为Add,Item等编写委托方法/属性,并使用NewEnum属性For Each来工作,我已经这样做了.
我的问题是该Implements Collection声明给出了上述错误.
奖金问题:是Count一种方法还是财产Collection?帮助将其称为属性,但VBA编辑器中的对象浏览器将其称为函数即方法(飞黄框).
您遇到了VBA中Implements的一个限制.如果另一个类具有名称中带有下划线的任何公共方法或属性,则无法实现另一个类.Collection课程当然有_NewEnum任何下划线都会引起问题.
例如,如果您创建了AddressClass具有以下内容的类:
Public Address_City As String
Run Code Online (Sandbox Code Playgroud)
然后创建了另一个类CustomerAddress:
Implements AddressClass
Private Property Get ClassInterface_Address_City() As String
End Property
Private Property Let ClassInterface_Address_City(ByVal RHS As String)
End Property
Run Code Online (Sandbox Code Playgroud)
编译时,您将收到错误"对象模块需要为接口'AddressClass'实现'Address_City'." 更改属性AddressCity会使错误消失.
可能的解决方案:如果我理解正确,您希望实现集合类,以便将新类传递给将集合作为参数的方法.是否有可能改变这些方法?我的建议是创建自己的集合类MyCollection,然后实现它.即UniformMyCollection这样你可以完全避免下划线问题.
至于Count,我会随时通过帮助文本信任对象浏览器.另一方面,如果您要创建自己的集合类,则选择哪一个并不重要.
VBA对可以实现的类有很多限制.NewEnum正在绊倒Collection,但即使不是,也很可能在该课程中还有其他东西可以将它绊倒.我认为它报告了它发现的第一个问题.
因为Collection有很少的属性和方法,所以我只是重写它们.
Private mcolParts As Collection
Public Sub Add(clsPart As CPart)
mcolParts.Add clsPart, CStr(clsPart.PartID)
End Sub
Public Property Get Count() As Long
Count = mcolParts.Count
End Property
Public Property Get Item(vItm As Variant) As CPart
Set Item = mcolParts.Item(vItm)
End Property
Public Sub Remove(vIndex As Variant)
mcolParts.Remove vIndex
End Sub
Run Code Online (Sandbox Code Playgroud)
在不知道为什么OB显示方法(它们看起来像绿色盒子给我).对于我的钱,方法要么改变多个属性,要么与类之外的东西进行交互.其他一切都是财产.我会调用Count和Index属性.
For EachDick Kusleika 拥有大部分内容,但如果您想在自定义类上使用,您还需要:
'--- required additional property that allow to enumerate the collection with For Each
Public Property Get NewEnum() As IUnknown
Set NewEnum = m_ColParts.[_NewEnum]
End Property
Run Code Online (Sandbox Code Playgroud)
我在收藏夹中找到的任何一个链接(这个或这个)都没有讨论这一点,但它们都值得一读。如果我找到谈论 NewEnum 的网站,我将进行编辑以添加它。
编辑
这些链接都不是我正在寻找的链接,但都讨论了 NewEnum 属性(包括需要添加的一些额外的巫术):
这两者都谈论Excel,但VBA在其他Office应用程序中是相同的(包括需要导出->文本编辑->导入过程来获取“属性”)。
| 归档时间: |
|
| 查看次数: |
5389 次 |
| 最近记录: |