gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:37:43 25 4
gpt4 key购买 nike

我在 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(Multiplier = 1)时,表单运行文件没有任何错误,但如果它有正值或负值,则会返回

Run-time Error 1004 : Application Defined/Object Defined Error

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

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

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

由于这仅限于某些系统 - 使用“双”变量类型是否存在任何区域/语言兼容性问题。

最佳答案

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

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

<小时/>

解决方案1
使用 replace()multiplier 中的任何逗号 , 替换为 .<小时/>

解决方案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,这样您甚至不需要该命名范围的辅助单元格。

但是,如果您随时更改乘数,工作表中使用指定范围乘数的每个旧公式也会发生变化。

关于vba - 使用变量类型 "Double"的运行时和兼容性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43041698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com