【问题标题】:Currency check whether € or $货币检查是欧元还是美元
【发布时间】:2015-07-11 09:08:01
【问题描述】:

我想编写一个子程序来检查单元格中的值是否被格式化为货币,然后检查该货币是欧元还是其他任何东西。 根据结果​​,应提示用户输入框输入给定货币和欧元之间的实际汇率。然后 sub 进行一些数学运算,并将计算出的 € 值格式化为 € 中的货币返回到单元格中。

通过 SO,我发现在单元格的值上使用 .NumberFormat,然后使用 InStr(1, cellValue, "€") = 0 检查它是否是欧元货币。

现在我使用德文版的 Excel,用Debug.Print Range("A1").NumberFormat 进行的简短测试给了我这个:#,##0.00 $。因此,即使我的 Excel 向我显示 € 作为货币,VBA 也会给我 $。

我该如何解决这个问题?我假设#,##0.00 $ 是 Excel 的后端逻辑,而它使用标准语言作为其前端逻辑并根据所选语言显示货币?

【问题讨论】:

  • If InStr(1,cell.NumberFormatLocal,"€") Then DoSomeStuff。关键是 NumberFormatLocal
  • 试过了。 .NumberFormatLocal 的输出是“标准”。尝试使用 € 和 $ 格式。两者都一样。
  • 哦!多么奇怪。它给了我我的当地货币。另一个繁琐的语言环境。加里的回答应该总是有效的。
  • 对不起,我的错误。我试的那个单元是空的……

标签: vba excel format


【解决方案1】:

您可以使用 .Text 属性而不是 .Value 属性来获取货币符号:

Sub MoneyCheck()
    Dim st As String
    st = ActiveCell.Text
    ch = Left(st, 1)
    If ch = "$" Then
        MsgBox "Dollars"
    ElseIf ch = "€" Then
        MsgBox "Not Dollars"
    End If
End Sub

【讨论】:

  • 嗯,多么简单的解决方案!谢谢。
  • 我会将其更改为执行 InStr,因为在货币符号前面有负号的默认样式下(或符号出现在右侧的国家/地区),上述方法将失败等)
【解决方案2】:

在 VBA 中,您应该看到 $*,因为它是系统默认货币,如果是 $€,例如特定的欧元或 $£,如果是英镑。 但是您永远无法确定显示的货币是正确的。操作系统语言/位置设置、Excel 设置和 Excel/VBA 语言都有影响。

最好的方法是在附加列中输入货币,例如在值之前(或之后)输入欧元。这是迄今为止最省钱的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 2019-05-11
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    相关资源
    最近更新 更多