excel - 是什么导致整个 ListBox 列为空?

标签 excel vba listbox

我正在开发一个 Excel 项目,其中有一个带有两个 ListBox 控件的 VBA 用户窗体。我通过将数组分配给 List 属性来加载它们。所有预期的数据都显示出来,除了完全空白的第七列。

为什么这一列是空白的?

额外细节:
该数组大约有 15 列和 25 行。
数组的第七列在 Locals 中列为 Variant/Decimal 类型。它包含 UPC值(最多 14 位)以 DECIMAL(14,0) 形式存储在数据库中。
所有 UPC 值都不是 NULL 或空白。它们确实出现在 Locals 窗口的数组中,并且可以从 ListBox 中检索,只是看不到。
ListBox 有 ListStyle fmListStylePlain 和 MultiSelect fmMultiSelectMulti。
尽管您不能将变量变暗(声明)为十进制,但您可以使用 CDec 函数转换为十进制:?typename(CDec(4.5))在立即窗口中。

最小的例子:
使用一个 ListBox (Listbox1)、两个 TextBox 控件(TextBox1 和 TextBox2)和两个命令按钮(CommandButton1 和 CommandButton2)创建一个用户窗体。
在用户窗体的代码模块中,粘贴以下代码:

Private Sub CommandButton1_Click()
    Dim x(0 To 0, 0 To 0)

    x(0, 0) = CDec(TextBox1.Text)
    ListBox1.List = x

    TextBox2.Text = ListBox1.List(0, 0)
End Sub

Private Sub CommandButton2_Click()
    Dim x(0 To 0, 0 To 0)

    x(0, 0) = CDbl(TextBox1.Text)
    ListBox1.List = x

    TextBox2.Text = ListBox1.List(0, 0)
End Sub

Annotated Screenshot

运行用户窗体,在 TextBox1 中键入一个数字(带或不带小数位),然后单击 CommandButton1。 ListBox1 保持空白,但 Textbox2 显示一个值。
单击命令按钮 2。 ListBox1 和 TextBox2 显示该值。

最佳答案

显然,VBA ListBox 无法处理 Variant/Decimal 值。我无法找到权威来源来解释这一点,但我发现使用 Format 函数将 Decimal 值转换为文本是有效的。

Dim vData as Variant
Dim lRow as Long

'fill vData array from database here
...

'convert seventh column to zero-padded 14-character string in this loop:
For lRow = LBound(vData,1) to UBound(vData,1)
    vData(lRow, 6) = Format(vData(lRow, 6), "00000000000000")
Next lRow

关于excel - 是什么导致整个 ListBox 列为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54353546/

相关文章:

VBA - 显示子程序运行所需的时间

c# - 如何访问放置在列表框数据模板内的控件?

vba - 如何使用变量名称引用工作表上的控件对象?

excel - 在 Excel 中使用 And 进行条件格式设置?

vba - Excel VBA - 变体上的类型不匹配错误(13)但仅在特定情况下

VBA:检测用户窗体的任何文本框中的更改

vba - 无法在 vba 中打开记录集

c# - Windows Phone 列表框选择到文本框

xml - 将列表框数据保存到 XML?

excel - 使用 VBA 自动智能 View hyperion 刷新