【发布时间】:2019-07-05 10:49:08
【问题描述】:
我的 Excel 的所有内容(公式、界面、指南)都设置为英文。 我的 Windows 设置为“,”作为十进制符号和“。”用于区域设置中的数字分组符号,因为我住在意大利。
如果我写这段代码:
Dim v As Variant
v = CDec("12345678901234567000,123456789")
v = v + 50
结果在 Locals 窗口中显示为“12345678901234567050,123456789”(变量/十进制)。如果我使用 msgbox 也一样。
如果我使用“。”而不是“,”,结果是 12345678901234567000123456839。
在 VBA 中,当写数字时(以数字的形式,而不是字符串),我必须使用英文语法,即“。”用于十进制符号。
我相信我的示例代码会在具有英语区域设置的 Windows 上错误地运行。
我怎样才能(修改它以)使其在任何区域设置下都能正常运行?
【问题讨论】:
-
IIRC,VBA 将始终使用
.作为小数分隔符。只有当你应该输入小数时输入字符串,你的代码才会运行不正确。就像 VBA 将#12/1/2000#视为 12 月 1 日一样。这就是为什么您需要在使用数据源之前对其进行验证。它适用于所有系统中的所有代码。如果它不能以这种方式工作,编码将是不可能的,因为您需要在遇到不同的语言设置时立即更改它 -
引用的代码可以在我的意大利语 Windows 上正常工作。将其作为字符串提供不仅有效,而且也是将比 Double 或 LongLong 数字更长/更精确的数字传递给 CDec 函数的唯一方法,这就是我的示例。
-
@Gareth 在 VBA 代码中硬编码的数字文字始终使用
.作为小数分隔符。##日期文字是另一种硬编码数字,无论如何也遵循相同的符号。但是C*转换函数适用于字符串并与计算机的区域设置相关,因为它们旨在与用户交互,因此它们希望根据计算机区域设置对字符串进行格式化。 -
@6diegodiego9 这是一个非常好的问题。
标签: vba regional-settings