确保字符串数字操作与文化无关

时间:2015-02-12 21:48:06

标签: string vba excel-vba double excel

我通过XmlHttp请求下载汇率,该请求作为string(作为.innerText元素的<div>)进入代码内并代表{{ 1}}类型编号:double

在构建此脚本时,我已在具有英文文化模型的操作系统上完成此操作(即1.525表示1个单位和0.525个小数)。 但是,此脚本现在将在法语操作系统上运行,该操作系统使用逗号1.525而不是,来分隔小数。

这意味着,如果.而不是Application.Evaluate(10000/myRate),则操作.将失败。

简单的解决方案是更换&#34;。&#34;与&#34;,&#34;通过,。但是,这显然不太好,因为现在脚本在英语系统上会失败。

使用Application.Evaluate(10000/Replace(myRate,".",",")我可以通过转换它来使其独立于文化:

VB.NET

我尝试用谷歌搜索VBA替代品一段时间没有成功;有没有人知道是否有更优雅的方式使我的脚本国际化,而不仅仅是替换&#34;。&#34;使用&#34;,&#34;?

这是我目前的解决方案(我不是很喜欢):

myRate.ToDouble(System.Globalization.CultureInfo.InvariantCulture)

3 个答案:

答案 0 :(得分:4)

使用Application.DecimalSeparator属性?

Application.Evaluate(10000/CDbl(Replace(myRate,".", Application.DecimalSeparator))

答案 1 :(得分:3)

您可以使用Application对象临时更改decimal和千位分隔符。

要阅读几个当前的OS(国际)设置:Application.International(index) property

改变:

Application.ThousandsSeparator = "." 

答案 2 :(得分:0)

在MS Access中,我们没有Application.DecimalSeparatorApplication.ThousandsSeparator也没有Application.International。我们唯一拥有的是Val(vString)Str(vNumber)。他们都使用英语(不变)文化来转换论证。

所以,在MS Access中,OP的问题可以这样解决:

vResult = 10000/Val(myRate)