如何让 Listbox.List 保留类型信息?

How to make Listbox.List keep type information?

如果我影响列表框的完整数组,例如使用 ListBox1.List = [{1;2;3;4}],列表框的 .List 项将保持其正确类型(此处为数字),但如果我使用 ListBox1.AddItem 5Listbox1.List(5) = 6 设置单个项目类型自动更改为 String.

示例代码:

Private Sub UserForm_Initialize()
    ListBox1.List = [{1;2;3;4}]
    ListBox1.AddItem 5
    ListBox1.AddItem
    ListBox1.List(5) = 6
End Sub

稍后,在比较值时,我得到了错误的结果,因为数字不等于文本 (5 <>"5")。

是否有任何简单的 (1) 方法来确保列表项的类型不转换为 String

(1) 我知道我可以明确地转换为字符串,但我宁愿将我的值保留为数字而不是列表框中的 "numbers-strored-as-text"

我想这在使用 AddItem 时是不可能的。根据https://docs.microsoft.com/en-us/office/vba/api/access.listbox.additem,第一个参数是一个字符串,所以你传递的所有内容都会被转换成一个字符串。

最好的办法可能是收集数组中的所有项目并使用 ListBox1.List 分配数组。或者您必须忍受存储为字符串的数字...

更新 我混淆了页面 - link 访问页面是错误的。
无论如何,文档很差。它说 "valid object" 但没有定义这意味着什么。至少不可能添加 object - 抛出类型不匹配。

此外,文档指出返回了 Variant,但似乎并非如此 - 当我尝试获取结果时,编译器会抛出错误。

作为结论,我假设 AddItem 将所有内容都转换为字符串(如果失败则抛出错误)。所以我仍然假设你必须建立一个数组并将其分配给 List 如果你想要实数。