VBA擦除本地货币数字格式

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

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

它适用于工作表上显示范围的方式(无论是百分比,货币还是date)。

但是,如果这个相同的范围链接到条形图并将其值用作标签(没有花哨的格式,请右键单击该系列>添加数据标签,这就是全部),当我触发macros时,标签格式将会改变更新图表来源范围(在我的例子中为newCellsRange ):格式将从欧元货币格式变为不合适的美国货币格式: 1 523€将变为1,523 $ 235 €235 €将变为235 $

为了给出进一步的细节,我发现范围的.NumberFormat属性是"#,##0 $" (显示€),而图表标签的是"# ##0 $" 。 我没有线索:

  • 为什么这个macros会让逗号消失,因为我什么都不做
  • 为什么"#,##0 $"会在电子表格中显示为€,而"# ##0 $"则为$。

我能做些什么不能得到这个奇怪的格式开关?

如果这有帮助(我怀疑):W7企业版Excel 2013 32位(英文版)(英文版)

数字格式取决于两件事。 首先在Windows操作系统的语言环境设置上,然后在Excel中select格式。 所以“货币”格式可以根据区域设置而不同。 用逗号或点作为小数点或不同的货币符号。 但在英文Excel版本中,其名称将始终为“货币”。

在VBA中,默认语言总是美国英语。 这是数字格式的一个难题,因为美国英语中的默认值是小数点,$是货币符号。 所以从Range.NumberFormat属性获取的“货币”格式也是在我的德语Excel中“#,## 0.00 $”。

如果我在我的德语Excel中分配Range.NumberFormat = "#,##0.00 $" ,那么表单将把它映射到区域设置“货币”。 为什么图表有这个问题呢? 我不知道。

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

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

可能会解决你的问题。