我在一个Function中得到了以下代码片段,它应该将Excel表格中许多列的数据体范围设置为“Currency”格式:
For i = 5 To oActiveTable.ListColumns.count
With oActiveTable.ListColumns(i).DataBodyRange
' .NumberFormat = "#,##0.00 €"
' .NumberFormat = "Currency"
.Style = "Currency"
End With
Next
评论的行分别是不满意或borken尝试。
.NumberFormat = "#,##0.00 €"
有效,但会导致格式显示为“自定义”这是不受欢迎的,因为它可能会导致人们在我的方法之上继续构建这种不良做法。
.NumberFormat = "Currency"
不起作用(错误1004 - 很明显,事后看来),在文档,教程和文章中进行的一些挖掘表明“货币”实际上是一种细胞风格。
.Style = "Currency"
有效,即设置了一个样式,但不知何故变成了“会计”样式 - 这不是我想要的,因为我们不希望“ - ”代表0(零)值。 / p>
为什么会发生这种情况,我该如何预防?
我很确定我不是第一个被这个难倒的人,但是搜索它并没有太多 - 大多数人似乎都是直接设置数字格式。
我在Windows 7上使用Excel 2010.两种语言都设置为英语,但系统的区域设置(时间,日期,数字格式......)设置为德国。
修改 我至少解决了令人困惑的方面:货币风格分配了会计数字格式。
答案 0 :(得分:1)
您可以做的是读出“货币”格式对Excel的含义,然后设置格式。选择具有“货币”格式的单元格并在VBA编辑器中执行此操作:
Debug.Print Application.ActiveCell.NumberFormatLocal
输出(在我的机器上):
#.##0,00 €
现在选择目标单元格(或在宏中选择一个范围,无论你需要什么)并执行此操作(我坚持使用活动单元格,因为它很容易测试):
Application.ActiveCell.NumberFormatLocal =“#。## 0,00€”
如果您检查用户界面,它应显示为“货币”格式。