用户可以通过用户窗体插入一个数值(比如1,000,000
)和一个ISO代码(比如USD
)。当他进行验证时,该值将在A1范围内打印,并通过使用以下宏记录的代码行将其格式化为货币:
.Range("A1").NumberFormat = _
"_-[$" & Me.ISOTextBox.Value & "] * #,##0.00_-;-[$" & Me.ISOTextBox.Value & "] * #,##0.00_-;_-[$" & Me.ISOTextBox & "] * ""-""??_-;_-@_-"
基本上,上面是分配.NumberFormat
属性的字符串;例如,在"USD"的情况下,字符串看起来像:
"_-[$USD] * #,##0.00_-;-[$USD] * #,##0.00_-;_-[$USD] * ""-""??_-;_-@_-"
我的问题是:如果使用上面的字符串,我设置数字格式,我如何获得?我可以清楚地进行字符串解析,这是我目前用于提取3个字母的ISO代码的"可怕"的解决方案:
ISOcode = Left(Replace(Split(Range("A1").NumberFormat, "[")(1), "$", ""), 3)
注意:以上代码将所有NumberFormat
除以[
,因此取第二个元素(从$USD
开始),将$
替换为""
,并取前三个字母,代表ISO代码的标准,通常为3个字母长)。
文档在这方面非常糟糕:有人知道是否有办法从货币格式中正确获取ISO代码吗?
我很确定您需要解析字符串,但可以使用更干净地提取ISO代码
If InStr(Range("A1").NumberFormat, "[$") <> 0 Then _
ISOcode = Mid(Range("A1").NumberFormat, InStr(Range("A1").NumberFormat, "[$") + 2, 3)