表达式太复杂错误

时间:2013-06-04 17:23:09

标签: vba excel-vba excel-2010 excel

我知道这个问题有很多问题,但我没有看到我可以应用于我的问题的答案。似乎这个错误可能是由很多事情引起的。

首先,这是代码:

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,以便它确实通过循环。

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也有效。