gpt4 book ai didi

vba - 编译错误 : Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-bound functions

转载 作者:行者123 更新时间:2023-12-05 02:18:15 24 4
gpt4 key购买 nike

我在使用一点 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

没有其他代码。我遇到的问题是我收到错误消息

Cannot define a public user-defined type within an object module

如果我将类型设为私有(private),则不会出现该错误,但我当然无法访问该类型的任何属性(使用 .NET 术语)。

如果我将代码从 Class1 移到 Module1 中,它可以工作,但是,我需要将它存储到一个集合中,这就是它出错的地方,也是我卡住的地方。

我已经将我的测试更新为

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

Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-bound functions

我已经对此进行了调查,但我不明白我需要做什么...如何将 SpiderKeyPair 添加到我的收藏中?

最佳答案

遇到了完全相同的问题并浪费了很多时间,因为错误信息具有误导性。我想念 List<>。

在 Visual Basic 中,您不能真正将所有内容都视为一个对象。您的结构和类在内存分配方面存在差异:https://learn.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/structures-and-classes

类型是一种结构(数组也是),所以如果您想要它们的“列表”,您最好使用数组及其附带的所有内容。

如果要用Collection来存储一个“List”,需要为要处理的对象创建一个Class。

并不奇怪...但这是该语言可用的内容。

关于vba - 编译错误 : Only user-defined types defined in public object modules can be coerced to or from a variant or passed to late-bound functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46049798/

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