是什么导致整个 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
我正在开发一个 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