为什么 VBA 会自动将小数点更改为逗号?

Why is VBA changing decimal to comma automatically?

我在 VBA 中有一个 Excel 宏。昨天一切正常,今天早上 VBA 正在将小数点更改为逗号。即从 5.1 到 5,1.

我使用的是德语系统,并且在Excel的高级选项中设置了点是小数点,逗号是千位。

例如,我在 Excel sheet 中将每日 scrum 会议的值设置为 3.75

Excel sheet 输入:

当我使用函数读取值时,例如:

Sub TestFunction()
    MsgBox (Sheets("Input_Parameters").Cells(25, 2))
End Sub

我用逗号得到值。

VBA函数输出:

VBA 环境中是否有设置可以解决此问题,或者我是否遗漏了什么。我所有的宏备份都显示出相同的影响,所以我知道我在今天的版本中没有对代码进行任何更改。

在具有德语默认语言环境 Windows 设置的德语系统上这是正常行为(在 Windows 设置中逗号作为小数点分隔符,点作为千位分隔符)。

MsgBox .Cells(25, 2).Value

returns 具有 Windows 语言环境默认值格式的值。

您在 Excel 选项中设置的 Application.DecimalSeparator 会影响单元格中显示的内容,但不会影响消息框显示的内容。

因此您可以使用

MsgBox .Cells(25, 2).Text

其中 returns 值的文本格式与单元格中的格式相同。


另一种解决方法是用 replace() 函数替换逗号:

MsgBox Replace(.Cells(25, 2).Value, ",", ".")

我来德国后创建的第一个功能就是这个:

Public Function ChangeCommas(ByVal myValue As Variant) As String

    Dim temp As String
    temp = CStr(myValue)
    ChangeCommas = Replace(temp, ",", ".")

End Function

自过去 2 年以来,它出现在每个 VBA 项目中。