我正在努力学习一些 VBa 和 Excel。我需要在 VBa 中创建一个结构,它是Type
。我遇到的问题是,当我尝试执行代码时收到一条错误消息!我觉得我需要解释一下我是如何到达现在的位置的,以防我犯了错误。
我读过要创建一个类型,它需要公开。因此,我创建了一个新类(在类模块下)。在Class1中,我写了
Public Type SpiderKeyPair
IsComplete As Boolean
Key As String
End Type
并在之内ThisWorkbook
我有以下内容
Public Sub Test()
Dim skp As SpiderKeyPair
skp.IsComplete = True
skp.Key = "abc"
End Sub
没有其他代码。我遇到的问题是收到错误消息
无法在对象模块中定义公共用户定义类型
如果我将类型设置为私有,则不会收到该错误,但当然我无法访问该类型的任何属性(使用 .NET 术语)。
如果我将代码从 Class1 移动到 Module1 中,它就可以工作,但是,我需要将其存储到一个集合中,这就是它出错的地方,也是我陷入困境的地方。
我已经更新了我的Test
to
Private m_spiderKeys As Collection
Public Sub Test()
Dim sKey As SpiderKeyPair
sKey.IsComplete = False
sKey.Key = "abc"
m_spiderKeys.Add (sKey) 'FAILS HERE
End Sub
只有在公共对象模块中定义的用户定义类型可以强制转换为变体或从变体强制转换或传递给后期绑定函数
我已经研究过这个,但我不明白我需要做什么...如何将 SpiderKeyPair 添加到我的集合中?
遇到了完全相同的问题并浪费了很多时间,因为错误信息具有误导性。我怀念 List。
在 Visual Basic 中,您不能真正将所有内容都视为对象。您的结构和类在内存分配方面存在差异:https://learn.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/structurals-and-classes https://learn.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/structures-and-classes
类型是一种结构(数组也是),因此如果您想要它们的“列表”,您最好使用数组及其附带的所有内容。
如果要使用Collection来存储“List”,则需要为要处理的对象创建一个Class。
并不令人惊奇......但这就是该语言所提供的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)