VBA 擦除本地货币数字格式

VBA erases local currency number format

我正在尝试将命名单元格中的数字格式应用到另一个单元格,其中源单元格格式可以是百分比、货币(在我的例子中是欧元)或其他任何格式。我的代码使用 .NumberFormat 范围 属性,如下所示:

For newCell in newCellsRange
    Range("newCell").Value = some_calculation()
    Range("newCell").NumberFormat = Range("sourceCell").NumberFormat
Next newCell

对于范围在 sheet 上的显示方式(无论是百分比、货币还是日期),它都适用。

但是,如果将这个非常相同的范围链接到条形图并将其值用作标签(没有花哨的格式,右键单击系列 > 添加数据标签就这样),标签格式将在以下时间更改我触发更新图表源范围的宏(在我的示例中为 newCellsRange):格式将从欧元货币格式更改为不正确的美国货币格式:1 523€ 将变为 1,523 $235 € 会变成 ,235 $.

为了提供更多详细信息,我发现范围的 .NumberFormat 属性 是 "#,##0 $"(显示 €),而图表标签的是 "# ##0 $"。我不知道:

我该怎么做才能避免这种奇怪的格式切换?

万一这有帮助(我怀疑):Excel W7 Enterprise(英文版)上的 2013 32 位(英文版)

数字格式取决于两件事。首先是 Windows 操作系统的区域设置,其次是 Excel 中选择的格式。因此 "Currency" 格式可以根据区域设置而有所不同。用逗号或点作为小数点或用不同的货币符号。但在英文 Excel 版本中,其名称将始终为 "Currency".

在 VBA 中,默认语言始终是美国英语。这是数字格式的一个难题,因为美国英语的默认设置是小数点和 $ 作为货币符号。因此 "Currency" 格式取自 Range.NumberFormat 属性,在我的德语 Excel.

中也将是“#,##0.00 $”

如果我在德语 Excel 中分配 Range.NumberFormat = "#,##0.00 $",那么 sheet 会将其映射到语言环境 "Currency"。为什么图表有这个问题?我不知道。

Microsoft 试图通过拥有 ...Local 属性来解决 VBA 中的困境。所以

For newCell in newCellsRange
    Range("newCell").Value = some_calculation()
    Range("newCell").NumberFormatLocal = Range("sourceCell").NumberFormatLocal
Next newCell

可能会解决您的问题。