【发布时间】:2017-05-03 03:55:38
【问题描述】:
我一直在寻找两天来解决我的问题,但到目前为止一无所获。
在我工作的地方开发了许多(非常多)vba excel 工具,我们在 PC-s 中的区域设置将逗号确定为小数分隔符,但从我们的系统下载的报告和数据以点作为小数分隔符。在这些工具中,我们只需要在需要时设置 UseSystemSeparators = False 然后设置 DecimalSeparators = "." 并在宏的末尾恢复。
现在新人已经获得了 Windows 10 电脑,并且一些工具遇到了错误。我从 IT 部门获得了一台 Win10 电脑进行测试,发现无论我如何在 Excel 设置中设置 VBA 宏都使用 PC 区域设置,而在工作表上它仍然使用 Excel 设置中确定的内容。相同的文件,在我的 win7 电脑中进行相同的测试,如果设置,则工作表和 vba 宏都使用本地应用程序设置。
有谁知道是什么原因以及如何解决?我可以想出很多变通办法,但所有这些都意味着这些工具需要重新编码,而且这些工具太多了,我仍然在不断地寻找新工具的使用以及在我 3 月份加入公司之前开发的工具。更改所有 ~300 PC-s 区域设置不是一个选项,因为它通常需要以逗号作为小数分隔符。
编辑:为了更清楚,我将添加一些代码:
Sub test()
Application.UseSystemSeparators = False
Application.DecimalSeparator = "."
variable = "10.1"
MsgBox CDbl(variable)
End Sub
在 Windows 7 下 - 没问题。可以转换包含字符串的变量。 在 Windows 10 - 运行时错误下,类型不匹配。两台电脑都有“,”作为系统分隔符。有趣的是,当我将“10.1”更改为“10,1”时,这对两台 PC 都有效。两台 PC 的设置相同。系统使用“,”作为分隔符,Excel设置使用“.”。
【问题讨论】:
-
@codegenerator 这个数据是否已经生成为非 Excel 文件,然后被导入 Excel?如果是这样,您如何将数据导入 Excel?使用 VBA,更好的方法是使用
Workbook.OpenText方法,该方法允许您指定导入数据中存在的千位和小数分隔符。在我看来,这将是一种更防弹的方法,尤其是在未来。 -
@codegenerator 您对 cdbl 的测试并未显示 Excel 未使用系统分隔符。将值写入工作表单元格,看看会发生什么。 VBA 不是 Excel
-
@codegenerator 还有,您可能需要更改千位分隔符
-
#codegenerator 我不相信您可以更改 VBA 中的小数点分隔符。我不知道为什么它在 2007 年有效。可能是您的代码或数据中的某些内容您没有与我们共享。据我所知,也许 a 一直只使用点作为小数分隔符
-
@codegenerator 我无法在 W10 / Excel 2016 中重现您的问题,当时我将系统分隔符设置为小数点的逗号和千位(数字)的空格。我复制/粘贴了您的代码和 MsgBox 显示
10,1您的环境一定有些不同。 (如果我使用点作为数字分隔符,那么10.1会被解释为101;这就是我将其设为non-dot的原因)。当事情不起作用时,您的系统区域小数和数字分隔符是什么?