将键添加到 VBA 中的集合
Adding a key to a collection in VBA
我在向集合添加键时遇到一个奇怪的问题。
运行-时间错误13:类型不匹配
模块代码:
'comment
Option Explicit
'comment
Sub testChildren()
'This is in Normal module
Dim mRoot As cMyClass, mc As cMyClass
Set mRoot = New cMyClass
With mRoot
'add collections
.Init 100, "john"
Set mc = New cMyClass
' Here I add the key that gives the run-time error 13
.Children.Add mc.Init(200, "janet"), mc.Key
Set mc = New cMyClass
' This one also generates run-time error 13 in case the previous adding is disabled
.Children.Add mc.Init(201, "john"), mc.Key
' Generate output
MsgBox (.Name & " has " & CStr(.Children.Count) & " children named " & _
.Children(1).Name & " and " & .Children(2).Name)
End With
End Sub
Class 模块 cMyClass
' 这是在 Class 模块
Option Explicit
Private pKey As Long
Private pName As String
Private pChildren As Collection
'Define Properties
Public Property Get Key() As Long
Key = pKey
End Property
'comment
Public Property Get Name() As String
Name = pName
End Property
'comment
Public Property Get Children() As Collection
Set Children = pChildren
End Property
'comment
Public Property Let Key(p As Long)
pKey = p
End Property
' Define Methods
Public Function Init(k As Long, sName As String) As cMyClass
pKey = k
pName = sName
Set pChildren = New Collection
Set Init = Me
End Function
'comment
'comment
正如@vba4all 所指出的,Collection Key 的正确类型是字符串...
在cMyClass
Option Explicit
Private pKey As String
Private pName As String
Private pChildren As Collection
Public myName As String
Public Property Get Key() As String
Key = pKey
End Property
'comment
Public Property Get Name() As String
Name = pName
End Property
'comment
Public Property Get Children() As Collection
Set Children = pChildren
End Property
'comment
Public Property Let Key(p As String)
pKey = CStr(p)
End Property
' Define Methods
Public Function Init(k As Long, sName As String) As cMyClass
pKey = CStr(k)
pName = sName
Set pChildren = New Collection
Set Init = Me
End Function
您已经有了修复代码的答案。但展望未来,需要注意两件事:
Run-time error 13: Type mismatch 是目标数据类型与输入数据类型不同时产生的常见错误。
我在向集合添加键时遇到一个奇怪的问题。 运行-时间错误13:类型不匹配
模块代码:
'comment
Option Explicit
'comment
Sub testChildren()
'This is in Normal module
Dim mRoot As cMyClass, mc As cMyClass
Set mRoot = New cMyClass
With mRoot
'add collections
.Init 100, "john"
Set mc = New cMyClass
' Here I add the key that gives the run-time error 13
.Children.Add mc.Init(200, "janet"), mc.Key
Set mc = New cMyClass
' This one also generates run-time error 13 in case the previous adding is disabled
.Children.Add mc.Init(201, "john"), mc.Key
' Generate output
MsgBox (.Name & " has " & CStr(.Children.Count) & " children named " & _
.Children(1).Name & " and " & .Children(2).Name)
End With
End Sub
Class 模块 cMyClass ' 这是在 Class 模块
Option Explicit
Private pKey As Long
Private pName As String
Private pChildren As Collection
'Define Properties
Public Property Get Key() As Long
Key = pKey
End Property
'comment
Public Property Get Name() As String
Name = pName
End Property
'comment
Public Property Get Children() As Collection
Set Children = pChildren
End Property
'comment
Public Property Let Key(p As Long)
pKey = p
End Property
' Define Methods
Public Function Init(k As Long, sName As String) As cMyClass
pKey = k
pName = sName
Set pChildren = New Collection
Set Init = Me
End Function
'comment
'comment
正如@vba4all 所指出的,Collection Key 的正确类型是字符串...
在cMyClass
Option Explicit
Private pKey As String
Private pName As String
Private pChildren As Collection
Public myName As String
Public Property Get Key() As String
Key = pKey
End Property
'comment
Public Property Get Name() As String
Name = pName
End Property
'comment
Public Property Get Children() As Collection
Set Children = pChildren
End Property
'comment
Public Property Let Key(p As String)
pKey = CStr(p)
End Property
' Define Methods
Public Function Init(k As Long, sName As String) As cMyClass
pKey = CStr(k)
pName = sName
Set pChildren = New Collection
Set Init = Me
End Function
您已经有了修复代码的答案。但展望未来,需要注意两件事:
Run-time error 13: Type mismatch 是目标数据类型与输入数据类型不同时产生的常见错误。