【问题标题】:Excel Run-time error 16 expression too complexExcel 运行时错误 16 表达式太复杂
【发布时间】:2012-11-13 04:05:36
【问题描述】:

我在 Excel 工作表中有这个基本代码

For x = 1 To ThisWorkbook.Worksheets("GRP0").Range("D9:D112").Rows.Count
' do work here
Next x

虽然当我执行时它给出了错误

Run-time error '16':

Expression too complex

我在兼容模式下使用 Excel 2007,如果有帮助,我相信该工作表是为/在 Excel 2003 中制作的。关于导致错误的任何想法?

【问题讨论】:

  • 您是否尝试过将长操作拆分为每个语句/行的单个赋值,以便您可以隔离导致错误的原因? (我想添加评论,但我的代表不允许我:p,所以我将其写为新答案。)
  • 您的代码没有问题,工作正常。您是否使用 for 循环中的代码对其进行测试?删除它,然后尝试重新测试。
  • 谷歌搜索会导致 xl07 出现许多类似问题,例如 as this
  • 循环是执行一次还是执行几次,还是在第一次迭代时失败?与菲利普的问题类似,您的循环代码是否修改了它的工作范围?例如做一个合并单元格?最后,如果您要对该范围进行硬编码,为什么不直接输入值呢?

标签: vba excel excel-2007 excel-2003


【解决方案1】:

让我只回答这个问题,让它离开“未回答”部分......以及寻找答案并看到完美书面问题的其他人。

所描述的问题时有发生。我不知道确切的原因,但有一种简单的方法可以解决它。您只需要使用变量,在循环开始之前设置它的值并在循环起始行中使用这个变量。这可能如下:

Dim rowsCount As Long
    rowsCount = ThisWorkbook.Worksheets("GRP0").Range("D9:D112").Rows.Count
    'and any other complex statement could be placed here
For x = 1 To rowsCount
    'do work here
Next x

根据我的经验,所有“表达过于复杂”的问题都可以通过这种方式解决。

【讨论】:

  • 请更正您在rowsCount 上的拼写,原因是X 的默认类型是Int,其中Int 的限制是32767。根据here 和从Excel 2007 开始,行限制是> > 32767,所以它溢出了。
  • 我不认为 X as Integer 是问题的原因。它应该返回“溢出”错误,但有“复杂表达式”消息....
  • 你是对的,如果我将 X 声明为 Integer 并硬编码 100,000 ,则会引发“溢出”错误。而且我无法在 2007 年的环境中重现错误 expression too complex..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多