0

嗨,为什么我会收到运行时错误 13:运行以下代码时出现类型不匹配错误

 Application.Goto Reference:="R1C1:R232C221"
 Selection.FormulaArray = "=ROUND(a(),0)"
 Selection.Replace What:="a()", Replacement:="IF(IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _
"Sheet4!A1:HM232+Sheet5!A1:HM232)+IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _
"Sheet4!A1:HM232+Sheet5!A1:HM232)=2,0,IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _
"Sheet4!A1:HM232+Sheet5!A1:HM232)+IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0,Sheet4!A1:HM232+Sheet5!A1:HM232))", LookAt _
    :=xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
    ReplaceFormat:=False
Range("I9").Select

1)我知道公式数组应该是 R1C1 样式...但是 A1 样式不是必需的,它也可以在 A1 样式中正常工作

  http://msdn.microsoft.com/en-us/library/bb208529.aspx

2)我发现了这种写作方式

  http://www.dailydoseofexcel.com/archives/2005/01/10/entering-long-array-formulas-in-vba/
4

2 回答 2

4

让我们分析一下您的替换:

Replacement:="IF(IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _
"Sheet4!A1:HM232+Sheet5!A1:HM232)+IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _
"Sheet4!A1:HM232+Sheet5!A1:HM232)=2,0,IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0," & _
"Sheet4!A1:HM232+Sheet5!A1:HM232)+IF(Sheet4!A1:HM232+Sheet5!A1:HM232=2,0,Sheet4!A1:HM232+Sheet5!A1:HM232))"

(1)Sheet4!A1:HM232+Sheet5!A1:HM232改为X

Replacement:="IF(IF(X=2,0," & _
"X)+IF(X=2,0," & _
"X)=2,0,IF(X=2,0," & _
"X)+IF(X=2,0,X))"

(2) 将破碎的碎片粘在一起:

Replacement:="IF(IF(X=2,0,X)+IF(X=2,0,X)=2,0,IF(X=2,0,X)+IF(X=2,0,X))"

(3)IF(X=2,0,X)改为Y

Replacement:="IF(Y+Y=2,0,Y+Y)"

(4) 一些评价:

  • 如果 X 为 2,则 Y 为 0,结果为 0。
  • 如果 X 为 1,则 Y 为 1,结果为 0。
  • 如果 X 是其他任何东西,Y 就是 X,结果是 2*X。

(5) 所以公式等价于:

Replacement:="IF(OR(X=2,X=1),0,2*X)"

(6) 所以下一步是替换 X(步骤 1 反向)......

我只想问你一两个问题:它是如何变得如此混乱的?你听说过“DRY”(不要重复自己)吗?

于 2009-06-30T23:54:50.077 回答
0

我认为“替代”论点太长了。您需要将该字符串保持在 255 个字符以下。将更多公式放入 Selection.FormulaArray 行,以便替换少于 255 个字符。

于 2009-06-30T00:39:54.673 回答