我知道这个问题有很多问题,但我没有看到我可以应用于我的问题的答案。似乎这个错误可能是由很多事情引起的。
首先,这是代码:
SurfArea = 19.63495408
Volume = 12.2718463
DeSimpleFinal = 0.009336098
Counter = 13
pi = 4*atn(1)
tracker = 0
stepamount = (Range("A" & Counter + 1).Value) / 1000
If Range("XFD1048508").Value = 1 Then
For x = 0 To Range("A" & Counter + 1).Value Step Stepamount
tracker = tracker + 1
ActiveSheet.Range("XEY" & tracker).Value = ((2 * SurfArea) / Volume) * Sqr((DeSimpleFinal * x) / pi)
ActiveSheet.Range("XEX" & tracker).Value = x
Next
Else
End If
我决定离开(Range(“A”和& Counter + 1).Value),因为我认为这可能与代码崩溃的原因有关。该单元格为A14,其内部值为11。
调试时标记的行是For循环的第一行。循环甚至不进行一次迭代。
有人知道它可能是什么吗?我将所有数据类型都更改为variant以查看是否存在问题,但这并没有做任何事情。谢谢你的帮助!
编辑:我应该注意,该范围的值应该是1,以便它确实通过循环。
答案 0 :(得分:3)
我不了解VBA的内部任何地方以了解原因,但我确实知道简化设置FOR
循环限制的表达式将消除{{1}问题。 (对this SO post的回应以及网络上其他地方的讨论也得出了相同的结论。)
只需声明一个新变量,例如Error 16 - Expression Too Complex
,为其分配您在StopAmount
条件中使用的表达式,然后将FOR
中的表达式替换为名称新变量。你会得到类似的东西:
FOR
那就是说,这里确实存在一些奇怪之处。
例如,如果迭代器变量 StopAmount = Range("A" & Counter + 1).Value
......
For x = 0 To StopAmount Step Stepamount
......
被声明为Variant(隐式或显式),则原始FOR
条件正常工作。 (我为我的测试声明了所有变量。)
但是,如果将x
标注为Double,则会返回错误。尽管x
将变体TypeName(x)
显示为范围(...)之后的双精度,但这是事实。
x
也没有问题。
For x = 0 To Range("A14").Value Step Stepamount
也有效。