0

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

首先,这里是代码:

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 循环的第一行。循环甚至没有经过一次迭代。

有人知道它可能是什么吗?我将所有数据类型都更改为变体,以查看是否是问题所在,但这没有任何作用。谢谢您的帮助!

编辑:我应该注意,该范围的值应该是 1,以便它确实通过循环。

4

1 回答 1

3

我对 VBA 的内部结构知之甚少,无法理解原因,但我知道简化设置FOR循环限制的表达式将消除该Error 16 - Expression Too Complex问题。(对这篇 SO 帖子的回应以及网络上其他地方的讨论得出了几乎相同的结论。)

只需声明一个新变量,例如,StopAmount将您在FOR条件中使用的表达式分配给它,然后将 中的表达式替换为FOR新变量的名称。你会得到类似的东西:

  StopAmount = Range("A" & Counter + 1).Value
  ......
  For x = 0 To StopAmount Step Stepamount
  ......

也就是说,这里肯定有一些奇怪的地方。

例如,FOR如果迭代器变量x被隐式或显式声明为 Variant,则您的原始条件可以正常工作。(我为我的测试声明了所有变量。)

但是,如果x标注为 Double,则会返回错误。尽管在Range(..).Value 赋值后将TypeName(x)Variant 显示为 Double 。x

For x = 0 To Range("A14").Value Step Stepamount也运行没有问题。

并且For x = 0 To Cells(Counter + 1, 1).Value Step Stepamount工作了,也是。

于 2013-06-04T21:42:09.690 回答