gpt4 book ai didi

vba - VBA 中结构的通用列表

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

我开始使用 VBA 在 Excel 中工作,并想保存某种列表。

我的方法如下,但我担心我正在寻找完全错误的方向。

Public Type MyType
ID As Integer
Name As String
MyInt As Integer
End Type

Public ListVar As New Collection

Public Sub MySub
Dim MyVar As MyType
MyVar.ID = 1
MyVar.Name = "name"
MyVar.MyInt = 2000

ListVar.Add MyVar, MyVar.ID
End Sub

尝试执行时,我收到一个编译错误:“只有在公共(public)对象模块中定义的用户定义类型才能强制转换为变体或从变体强制转换或传递给后期绑定(bind)函数。”

目标是拥有一个类似于 List 的 C#,我可以在其中添加 MyType 对象并以您可以在 C# 中执行的方式找到它们:ListVar.find(p => p.ID == 3)。
此外,如果可行,该列表应该在文件中持久存在。这不是必需的,因为我可以在关闭时将其简单地写入工作表,反之亦然。

我是否可以使用更适合我需要的不同对象类?

最佳答案

你可以使用数组列表吗?在您的子中:

Dim arrayList As Object
Set arrayList = CreateObject("System.Collections.ArrayList")

然后,您可以使用 .NET 类型 ArrayList 的所有常用方法,例如 .Contains().Sort() ETC...

编辑: (因为 OP 使用的是 Mac OS)

您可以自己创建一个类,并在集合中使用它。首先创建一个新的类模块(Alt+I,然后是 C)

在本模块中使用以下内容:
Private sID     As Integer
Private sName As String
Private sInt As Integer

Public Property Let ID(value As Integer)
sID = value
End Property

Public Property Get ID() As Integer
ID = sID
End Property

Public Property Let Name(value As String)
sName = value
End Property

Public Property Get Name() As String
Name = sName
End Property

Public Property Let MyInt(value As Integer)
sInt = value
End Property

Public Property Get MyInt() As Integer
MyInt = sInt
End Property

重要 - 将模块命名为“MyType”,这是您要在代码中使用的名称。

中返回您原来的子目录正常 代码模块:
Public ListVar As New Collection

Public Sub MySub()

Dim MyVar As New MyType
MyVar.ID = 1
MyVar.Name = "name"
MyVar.MyInt = 2000

ListVar.Add MyVar, CStr(MyVar.ID)

End Sub

会正常工作。

关于vba - VBA 中结构的通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36151362/

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