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

时间:2013-01-21 16:42:05

标签: 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

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

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

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:0)

Btw猜测我在发布后稍微阅读了您的问题;)Excel受到计算机区域设置的影响,因为货币,语言,日期......使用数字格式可以强制它保留您需要的符号。如果是四舍五入的问题,您可以尝试:在Excel 2010上,转到文件 - 选项 - 高级,向下滚动到“计算此工作簿时”,然后单击“显示设置精度”并单击“确定”。

试试这个:给定你的值是数字/整数/小数....

Range("a2").Style = "Currency"

或者您可以使用格式:

Format(value, "Currency")

Format(Range(a2).value, "Currency")

参考文献:

http://www.mrexcel.com/forum/excel-questions/439331-displaying-currency-based-regional-settings.html

http://www.addictivetips.com/microsoft-office/excel-2010-currency-values/

(PS:我在移动设备上,你可以尝试这两个链接)