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

6
我有一个VBA编写的Excel宏。昨天一切正常,今天早上VBA将小数点更改为逗号。即从5.1变成了5,1。
我正在使用德语系统,并在Excel的高级选项中设置小数点为小数,逗号为千位分隔符。
例如,我在Excel表格中将每日Scrum会议的价值设定为3.75。
Excel表格输入:
screenshot 当我使用函数读取该值时,如下所示:
Sub TestFunction()
    MsgBox (Sheets("Input_Parameters").Cells(25, 2))
End Sub

我得到了逗号分隔的值。

VBA函数输出:
output

在VBA环境中是否有设置来解决这个问题,或者是我漏掉了什么。我的所有宏的备份都显示了相同的影响,所以我知道这不是我在今天版本的代码中更改的内容。


你说的“VBA将小数点改为逗号”是什么意思?在VBA中,你只能使用点作为小数点,即使在德语系统中也是如此。你能展示一下你的代码吗([编辑]问题并添加它)? - Pᴇʜ
我知道这是一个奇怪的问题。在调用单元格时,它会发生在多行上。例如,在Excel单元格中,SpNum =(Sheets(“Input_Parameters”).Cells(TargVerFirstRow + i,4))为29.29,但在VBA代码和输出中,我得到了29,2857...。 - Dave
请不要使用评论添加代码,请使用[编辑]按钮编辑您的问题。添加一个完整示例,描述您的代码实际上是做什么以及您期望它做什么。如果您发布了一行单独的加密代码而没有任何解释,那么任何人都无法提供帮助。如果有必要,还可以添加截图以显示出现了什么问题。您的问题非常不清楚。 - Pᴇʜ
尝试使用 MsgBox Sheets("Input_Parameters").Cells(25, 2).Value(不要多余的括号) - SierraOscar
仍然没有起作用,结果还是一样的。 - Dave
2个回答

10

在德语系统中,如果使用德语默认区域设置的 Windows 设置(小数点作为小数分隔符,逗号作为千位分隔符),这是一种正常行为。

MsgBox .Cells(25, 2).Value

以Windows本地化默认格式返回值。

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

因此,您可以使用

MsgBox .Cells(25, 2).Text

此函数返回格式与单元格中相同的文本值。


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

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

这确实是问题所在。将值作为字符串推出会将点转换为逗号。最终的值是正确的,但逗号应该是一个点。谢谢。 - Dave

2

我来到德国后创建的第一个函数是这个:

Public Function ChangeCommas(ByVal myValue As Variant) As String

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

End Function

在过去两年里,它已经存在于每个VBA项目中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接