在Excel VBA中为范围设置的“货币”样式结果为“会计”

时间:2017-08-24 08:50:38

标签: excel-vba excel-2010 vba excel

我在一个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.两种语言都设置为英语,但系统的区域设置(时间,日期,数字格式......)设置为德国。

修改 我至少解决了令人困惑的方面:货币风格分配了会计数字格式

1 个答案:

答案 0 :(得分:1)

您可以做的是读出“货币”格式对Excel的含义,然后设置格式。选择具有“货币”格式的单元格并在VBA编辑器中执行此操作:

Debug.Print Application.ActiveCell.NumberFormatLocal

输出(在我的机器上):

#.##0,00 €

现在选择目标单元格(或在宏中选择一个范围,无论你需要什么)并执行此操作(我坚持使用活动单元格,因为它很容易测试):

Application.ActiveCell.NumberFormatLocal =“#。## 0,00€”

如果您检查用户界面,它应显示为“货币”格式。