VBA UserForm Listbox绑定表格数据时货币格式出现错误符号如何解决
问题成因
通过RowSource直接绑定工作表数据时,ListBox默认读取的是单元格原始数值,渲染时调用系统默认区域格式规则,不会沿用你在工作表中设置的法国货币格式,因此会出现千分位符号不符合要求、货币符号位置错误的问题。
修复方案
方案1:手动填充ListBox(最推荐)
放弃RowSource绑定,读取单元格格式化后的显示文本写入ListBox,可100%保留工作表内的格式效果,代码示例如下:
Dim i As Long, j As Long Dim dataRng As Range Set dataRng = msOperationTable.DataBodyRange ' 初始化ListBox配置 TableEntries.Clear TableEntries.ColumnCount = 6 TableEntries.ColumnHeads = True TableEntries.ColumnWidths = "100; 140; 150; 85; 100; 70" ' 逐行写入格式化后的数据 For i = 1 To dataRng.Rows.Count TableEntries.AddItem For j = 1 To 6 ' 直接读取单元格的显示文本,自带你设置好的法国货币格式 TableEntries.List(i - 1, j - 1) = dataRng.Cells(i, j).Text Next j Next i
如果希望脱离单元格格式强制输出法国货币格式,也可以用Format函数直接处理数值:
' 假设第4列为货币列,强制按法国货币规则格式化 TableEntries.List(i - 1, 3) = Format(dataRng.Cells(i, 4).Value, "# ##0.00 €")
方案2:调整系统区域设置(不推荐)
如果必须保留RowSource绑定的用法,可以将Windows系统的区域格式修改为「法语(法国)」,ListBox会自动调用对应格式规则渲染数值。但该修改会影响全系统所有软件的格式显示,适配性极差,仅做备选参考。
内容的提问来源于stack exchange,提问作者Maxime Michel
相关产品推荐
相关产品推荐

