为啥 VBA 会自动将十进制更改为逗号?

Posted

技术标签:

【中文标题】为啥 VBA 会自动将十进制更改为逗号?【英文标题】:Why is VBA changing decimal to comma automatically?为什么 VBA 会自动将十进制更改为逗号? 【发布时间】:2017-05-09 07:16:21 【问题描述】:

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

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

例如,我在 Excel 工作表中设置了每日 Scrum 会议的值,设置为 3.75

Excel工作表输入:

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

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

我用逗号得到值。

VBA函数输出:

VBA 环境中是否有设置来解决此问题,或者我缺少什么。我所有的宏备份都显示出相同的效果,所以我知道在今天的版本中我没有更改任何代码。

【问题讨论】:

VBA 采用小数点并将小数点更改为逗号。”是什么意思?在 VBA 中,即使在德语系统中,您也只能使用小数点 a = 5.3。你能显示你的代码吗(edit问题并添加它)? 我知道这是一个奇怪的问题。当调用一个单元格时,它发生在多行上。例如,Excel 单元格中的 SpNum = (Sheets("Input_Parameters").Cells(TargVerFirstRow + i, 4)) 为 29.29,但在 vba 代码和输出中我得到 29,2857.... 请不要使用 cmets 添加代码,使用 edit 按钮编辑您的问题。添加一个完整示例并描述您的代码实际执行的操作以及您期望它执行的操作。如果您在没有任何解释的情况下发布一行神秘的代码,没有人可以提供帮助。如果这有助于您解释,还可以添加屏幕截图以显示出了什么问题。你的问题很不清楚。 试试MsgBox Sheets("Input_Parameters").Cells(25, 2).Value(没有多余的括号) 没有工作仍然得到相同的结果 【参考方案1】:

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

MsgBox .Cells(25, 2).Value

以 Windows 语言环境默认格式返回值。

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

因此你可以使用

MsgBox .Cells(25, 2).Text

它以文本格式返回值,就像单元格中一样。


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

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

【讨论】:

这确实是问题所在。将值作为字符串推出,将点转换为逗号。最后的值是 write 但逗号应该是一个点。谢谢【参考方案2】:

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

Public Function ChangeCommas(ByVal myValue As Variant) As String

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

End Function

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

【讨论】:

以上是关于为啥 VBA 会自动将十进制更改为逗号?的主要内容,如果未能解决你的问题,请参考以下文章

VBA:为从 SQL Server 数据库中选择的十进制数获取逗号分隔符而不是点

为啥 Web API 可以正确解析动作路径中逗号分隔的 int 数组,但无法解析逗号分隔的十进制数组?

如何将表列从十进制更改为 varchar [重复]

添加逗号时如何更新此 jQuery 插件/正则表达式以忽略小数?

如何使用按位运算符将二进制更改为十进制?

如何将 money 和 smallmoney 的所有 SQL 列更改为十进制?