如何让 Listbox.List 保留类型信息?
How to make Listbox.List keep type information?
如果我影响列表框的完整数组,例如使用 ListBox1.List = [{1;2;3;4}]
,列表框的 .List
项将保持其正确类型(此处为数字),但如果我使用 ListBox1.AddItem 5
或 Listbox1.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
如果你想要实数。
如果我影响列表框的完整数组,例如使用 ListBox1.List = [{1;2;3;4}]
,列表框的 .List
项将保持其正确类型(此处为数字),但如果我使用 ListBox1.AddItem 5
或 Listbox1.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
如果你想要实数。