excel - 是什么导致整个 ListBox 列为空?
问题描述
我正在开发一个 Excel 项目,其中有一个带有两个 ListBox 控件的 VBA 用户窗体。我通过将数组分配给 List 属性来加载它们。所有预期的数据都显示出来,除了完全空白的第七列。
为什么这一列是空白的?
其他详细信息:
该数组大约有 15 列和 25 行。
数组的第七列在 Locals 中列为 Variant/Decimal 类型。它包含以 DECIMAL(14,0) 形式存储在数据库中的UPC值(最多 14 位)。
所有 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
运行用户窗体,在 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
推荐阅读
- sql - 基于可变长度字段将一列一分为二
- error-handling - Nano:dyld:未加载库:/usr/local/opt/gettext/lib/libintl.8.dylib
- excel - 具有重叠时间范围的时间序列,仅使用 Excel Power Query 中的最新
- git - 是否可以在旧代码 Visual Studio 2003 环境中使用 bitbucket?
- c - 谁能告诉我为什么这一直是0?(C程序)
- c++ - 如何解决 undefined reference cv:.... 在 Linux/Ubuntu 中编译 openCV 应用程序时?
- c# - 从跨域专用服务器(Asp.net)访问文件夹
- angular - 如何使用打字稿编辑 AG-GRID 中的日期字段?
- android - NPE while 使用 io.reactivex.Observable 过滤列表
- python - 使用 python 的 Lambda@edge 函数