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

时间:2019-01-24 18:53:12

标签: excel vba listbox

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

为什么整列都为空白?

其他详细信息:
该数组大约有15列和25行。
数组的第七列在“本地”中以Variant / Decimal类型列出。它包含UPC值(最多14位),以DECIMAL(14,0)的形式存储在数据库中。
UPC值都不为NULL或空白。它们确实显示在“本地”窗口中的数组中,并且可以从列表框中检索它们,只是看不见。
列表框具有ListStyle fmListStylePlain和MultiSelect fmMultiSelectMulti。
尽管不能将变量变暗(声明)为Decimal,但是可以使用CDec函数:?typename(CDec(4.5))在“立即”窗口中将其转换为Decimal。


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

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显示一个值。
单击CommandButton2。 ListBox1和TextBox2显示该值。

1 个答案:

答案 0 :(得分:2)

显然,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