【问题标题】:How to make Listbox.List keep type information?如何让 Listbox.List 保留类型信息?
【发布时间】:2018-10-22 09:06:57
【问题描述】:

如果我将完整数组影响到 ListBox,例如使用 ListBox1.List = [{1;2;3;4}],Listbox 的 .List 项目将保持其正确类型(此处为数字),但如果我使用 ListBox1.AddItem 5Listbox1.List(5) = 6 设置个人item 类型自动更改为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”

【问题讨论】:

    标签: vba listbox-control


    【解决方案1】:

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

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

    更新 我混淆了页面 - 访问页面的链接错误。
    无论如何,文档相当差。它说“有效对象”,但没有定义这意味着什么。至少不可能添加 object - 这会引发类型不匹配。

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

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

    【讨论】:

    • 好吧,我用的不是Access Listbox控件,而是MSForm一个,而且the documentation没有指定“String”
    猜你喜欢
    • 2012-05-31
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 2019-03-14
    • 2016-02-21
    • 2021-03-24
    相关资源
    最近更新 更多