String 确保字符串编号操作与区域性无关

String 确保字符串编号操作与区域性无关,string,vba,excel,double,String,Vba,Excel,Double,我通过XmlHttp请求下载汇率,该请求以字符串的形式进入代码(作为元素的.innerText)并表示双类型编号:1.525 在构建这个脚本时,我已经在我的操作系统上完成了,该操作系统具有英国文化模式(即1.525表示1个单位和0.525个小数)。 但是,该脚本现在将在法语操作系统上运行,该操作系统使用逗号,而不是,来分隔小数 这意味着,如果使用而不是,,则操作Application.Evaluate(10000/myRate)将失败 简单的解决方案是通过应用程序.Evaluate(10000/

我通过
XmlHttp
请求下载汇率,该请求以
字符串
的形式进入代码(作为
元素的
.innerText
)并表示
类型编号:
1.525

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

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

简单的解决方案是通过
应用程序.Evaluate(10000/replace(myRate,“.”,“,”)
将“.”替换为“.”。但是,这显然不好,因为现在脚本在英文系统上会失败

使用
VB.NET
我可以通过如下转换使其与文化无关:

myRate.ToDouble(System.Globalization.CultureInfo.InvariantCulture)
我在谷歌上搜索VBA替代方案已经有一段时间没有成功了;有人知道有没有一种更优雅的方式来国际化我的脚本,而不仅仅是将“.”替换为“,”

以下是我目前的解决方案(我不太喜欢):

出错时继续下一步
测试=CDbl(myRate)/2
如果错误号为0,则
myRate=替换(myRate,“.”,“,”)
错误转到0
如果结束

是否使用
应用程序.DecimalSeparator
属性

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

是否使用
应用程序.DecimalSeparator
属性

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

您可以使用应用程序对象临时更改小数点和千位分隔符

要读取多个当前操作系统(国际)设置,请执行以下操作:

要更改:

Application.ThousandsSeparator = "." 

您可以使用应用程序对象临时更改小数点和千位分隔符

要读取多个当前操作系统(国际)设置,请执行以下操作:

要更改:

Application.ThousandsSeparator = "." 

在MS Access中,我们没有
Application.DecimalSeparator
也没有
Application.thoundsparator
也没有
Application.International
。我们只有
Val(vString)
Str(vNumber)
。它们都使用英语(不变)文化转换参数

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

vResult = 10000/Val(myRate)

在MS Access中,我们没有
Application.DecimalSeparator
也没有
Application.thoundsparator
也没有
Application.International
。我们只有
Val(vString)
Str(vNumber)
。它们都使用英语(不变)文化转换参数

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

vResult = 10000/Val(myRate)

这正是我想要的。感谢lot这正是我想要的。也感谢lotNice(特别是要知道),但我更喜欢的解决方案,因为它使所有的东西都排成一行,并确保100%的转换,而无需更改应用程序属性:)好的,谢谢;)也很好(特别是要知道),但我更喜欢的解决方案,因为它可以使所有内容都排成一行,并且可以100%确保转换,而无需更改应用程序属性:)好的,非常感谢;)