使用变量类型" Double"运行时和兼容性错误

时间:2017-03-27 08:43:47

标签: vba excel-vba double regional-settings excel

我在VBA宏中使用Double类型变量时遇到一个奇怪的问题。

当我在某些系统上测试宏时,宏工作正常,但会导致运行时错误' 1004'在另一个具有不同语言设置的系统上测试时。 两个系统都使用Office 2013。

我在表单中有一个ScrollBar,其值介于-50到+50之间。 基本上是增加/减少范围值的指标 - / + 50% 宏是如下的简单:

Dim multiplier As Double

multiplier = CLng(Me.DPScroll.Value) / 100 + 1
ThisWorkbook.ActiveSheet.Range("AB11:AB" & LR).Formula = "=H11*" & multiplier

DPScroll.Value = 0(乘数= 1)时,表单运行文件没有任何错误,但如果它有正值或负值,则返回

  

运行时错误1004:应用程序定义/对象定义错误

(在我的系统上,两者都可以正常工作)

所以,我猜测乘数无法取小数点的值(例如1.07增加7%)

(不太重要的问题) 它还会在另一张纸上导致奇怪的格式错误。 我计算列表框中几行的平均值并将值粘贴到一个范围。在某些系统上,格式保留,但在其他系统上,它会更改并乘以数百万,并显示一个大数字(如10 ^ E6次)

由于这仅限于某些系统 - 是否存在任何区域/语言相容性问题与起诉" Double"变量类型。

1 个答案:

答案 0 :(得分:2)

这确实是一个本地化问题。只要您使用.Formula,区域设置始终是标准美国,这意味着乘数必须为1.07(例如,不是1,07)。

但是,如果本地化是德语,那么如果将乘数转换为字符串,它将变为1,07,但.Formula需要美国标准1.07

解决方案1 ​​
使用,

multiplier中的所有逗号.替换为replace()

解决方案2
使用.FormulaLocal来使用本地化公式:

ThisWorkbook.ActiveSheet.Range("AB11:AB" & LR).FormulaLocal= "=H11*" & multiplier

但是你可能不得不处理其他问题,例如: =IF(A1=0,TRUE,FALSE)也变得本地化(例如德语):=WENN(A1=0;WAHR;FALSCH)

解决方案3
另一种方法是将乘数写入命名范围,因此您可以直接在公式中使用该名称,如下所示:

ThisWorkbook.ActiveSheet.Range("AB11:AB" & LR).Formula = "=H11*multiplier"

因此,您可以使用ActiveWorkbook.Names.Add "multiplier", multiplier,因此您甚至不需要该命名范围的辅助单元格。

但是如果你随时改变乘数,它也会改变你工作表中使用了命名范围multiplier的每个旧公式。