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 $"
。我不知道:
- 为什么宏会让逗号消失,因为我没有为此做任何事情
- 为什么
"#,##0 $"
会在点差上显示为欧元sheet 而 "# ##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
可能会解决您的问题。
我正在尝试将命名单元格中的数字格式应用到另一个单元格,其中源单元格格式可以是百分比、货币(在我的例子中是欧元)或其他任何格式。我的代码使用 .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 $"
。我不知道:
- 为什么宏会让逗号消失,因为我没有为此做任何事情
- 为什么
"#,##0 $"
会在点差上显示为欧元sheet 而"# ##0 $"
会显示为 $.
我该怎么做才能避免这种奇怪的格式切换?
万一这有帮助(我怀疑):Excel W7 Enterprise(英文版)上的 2013 32 位(英文版)
数字格式取决于两件事。首先是 Windows 操作系统的区域设置,其次是 Excel 中选择的格式。因此 "Currency" 格式可以根据区域设置而有所不同。用逗号或点作为小数点或用不同的货币符号。但在英文 Excel 版本中,其名称将始终为 "Currency".
在 VBA 中,默认语言始终是美国英语。这是数字格式的一个难题,因为美国英语的默认设置是小数点和 $ 作为货币符号。因此 "Currency" 格式取自 Range.NumberFormat
属性,在我的德语 Excel.
如果我在德语 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
可能会解决您的问题。