我正在处理一个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
运行用户窗体,在TextBox1中键入一个数字(带或不带小数位),然后单击CommandButton1。 ListBox1保持空白,但Textbox2显示一个值。
单击CommandButton2。 ListBox1和TextBox2显示该值。
答案 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