【问题标题】:How to set decimal separator in MS Access using VBA?如何使用 VBA 在 MS Access 中设置小数点分隔符?
【发布时间】:2019-08-21 16:31:55
【问题描述】:

我的软件直接从 Access 财务数据库创建 PAIN001.XML 文件。小数分隔符必须始终是一个点。数字的格式为:

MyText = Format(MyNumber, "#0.00")

但是,格式字符串的点会自动替换为系统小数分隔符,可能是“,”而不是“。” !

在 Excel 中有简单的解决方案,例如:

Application.DecimalSeparator = "."
...

但是,MS Access 无法识别此应用程序属性。 有没有一种简单的方法可以在 Access vba 代码中定义小数分隔符?

当然,可以创建一个函数来扫描每个 MyText 数字以查找错误的小数分隔符并用一个点替换它们,但是必须为每个数字单独调用此函数,从而大大降低了代码速度……

【问题讨论】:

    标签: vba ms-access decimal separator


    【解决方案1】:

    小数点分隔符必须始终为点。

    然后使用Str

    MyText = Str(MyNumber)
    

    要将这样的字符串转换为数字,请使用 Val

    MyNumber = Val(MyText)
    

    【讨论】:

    • 谢谢,但这并不能解决问题,因为从数字生成文本时,Access 始终使用默认的小数分隔符。使用 MyText=Format(123, "#0.00"): the "." 时也是如此。不被解释为点,而是小数点分隔符 - 也就是说,当小数点分隔符为“,”时,MyText 为 123,00!
    • 它确实回答了你原来的问题。当然,它不能回答你的新问题。您的假设,即 Access (VBA) 始终使用默认的小数分隔符,是不正确的。请查看编辑后的答案。
    【解决方案2】:

    我猜这个问题不能用小数点分隔符Application.DecimalSeparator = "." 解决,即使 Access 库支持它。对于非美国用户来说,这是一个相当复杂的问题,因为我们习惯使用, 作为小数分隔符。

    通常,VBA 仅将. 视为小数分隔符。在不考虑应用程序默认分隔符、用户位置及其设置的情况下。因此,可能会发生一些有趣的情况:

    Sub TestMe()
        Dim myText As String
        myText = "123,42"
        Debug.Print Replace(Format(myText, "#0.00"), ",", ".")
    End Sub
    

    我前段时间实施的一个可能的解决方案是使用Replace() 并按照上面的 gif 进行替换。确实可能有点慢,但考虑到 VBA 和 Access 的使用,无论如何应用程序都无法达到极速。

    【讨论】:

    • 谢谢,我猜这是解决问题的唯一方法。为了尽量减少对速度的影响,我首先检索一次系统小数分隔符 DecSep=Right((Format(0, "0."), 1) ,然后在每次必要时调用格式化函数 BankSum(Amount,DecSep) 来实现它: If DecSep = "." Then BankSum = Format(Amount, "#0.00") Else BankSum = Replace(Format(Amount, "#0.00"), DecSep, ".") End If As 格式化是一步完成的,对速度的影响可以忽略不计。注意:在瑞士,“.”或“,”都是常见的 - 但对于网上银行 XML 文件,这必须始终是“.”!
    • @Bughater - 好吧,如果它适合你,那就没问题。不过,请考虑一些输入,使用 thausands 分隔符,例如 100.000,32。这可能真的会打击粉丝。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    相关资源
    最近更新 更多