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

What causes an entire ListBox column to be blank?

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

为什么这一栏都是空白的?

其他详细信息:
该数组大约有 15 列和 25 行。
数组的第七列在 Locals 中列为 Variant/Decimal 类型。它包含 UPC 值(最多 14 位)存储在数据库中作为 DECIMAL(14,0)。
None 的 UPC 值是 NULL 或空白。它们确实出现在 Locals window 的数组中,并且可以从 ListBox 中检索它们,只是看不到。
ListBox 有 ListStyle fmListStylePlain 和 MultiSelect fmMultiSelectMulti.
虽然不能将变量 Dim(声明)为 Decimal,但可以使用 CDec 函数转换为 Decimal:?typename(CDec(4.5)) in the Immediate window.


最小示例:
创建一个带有列表框 (Listbox1)、两个文本框控件(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

运行 用户窗体,在 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