返回货币格式单元格中的ISO代码



用户可以通过用户窗体插入一个数值(比如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)

最新更新