使用VBA将单元格格式化为任意货币,而不考虑区域设置

har*_*ryg 4 excel vba number-formatting

这真的很烦我,因为它的工作方式似乎很不合逻辑.

我有一个宏来格式化单元格作为货币使用一些代码来获得货币符号.

这是涉及的代码:

Dim sym As String
sym = reportConstants(ISOcode)
    'Just use the ISO code if there isn't a symbol available
    If sym = "" Then
    sym = ISOcode
    End If
With range(.Offset(0, 3), .Offset(3, 3))
.NumberFormat = sym & "#,##0;(" & sym & "#,##0)"
Debug.Print sym & "#,##0;(" & sym & "#,##0)"
End With
Run Code Online (Sandbox Code Playgroud)

reportConstants是一个字典对象,货币符号定义为字符串.例如reportConstants("USD") = "$".这是在宏的早期定义的.

当宏运行时,它获取ISO代码,然后应使用相应的货币符号格式化单元格.

当我在一个实例中运行它时,ISO代码是"USD" - 因此sym定义为"$"- 但它仍然使用井号(£)格式化单元格.当我debug.print显示格式单元格字符串时$#,##0;($#,##0),只要我的语法正确,就应该在单元格中使用美元符号.但它使用的是£符号.(我正在运行英国版的excel,因此它可能默认为£-sign,但为什么呢?)

任何帮助非常感谢.

Mat*_*rum 8

我刚刚录制了一个宏来将格式设置为$ xx.xx并创建了这个:[$$-409]#,##0.00.看起来-409将货币本地化到特定国家; 它没有它工作 - 尝试改变你的.NumberFormat = "[$" & sym & "]#,##0.00"