2009-06-29 8 views
0

привет почему я получаю сообщение об ошибке выполнения 13: тип ошибки рассогласования при выполнении следующего кодапервенствует FormulaArray

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) Я знаю, что FormulaArray должен быть в стиле 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/ 

ответ

0

Я считаю, что аргумент «замены» слишком длинный. Вы должны сохранить эту строку под 255 символами. Поместите больше формулы в строку Selection.FormulaArray так, чтобы замена была меньше 255 символов.

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) в обратном направлении ...

I» я просто оставлю вас с вопросом или два: как это стало настолько грязным? Вы слышали о «СУХОЙ» (не повторяйте сами)?

Смежные вопросы