excel FormulaArray
-
21-08-2019 - |
Pergunta
oi Por que eu recebo o erro de tempo de execução 13: erro de incompatibilidade de tipo enquanto executa o seguinte código
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) Eu sei que FormulaArray deve ser em grande estilo R1C1 ... mas o estilo A1 não é necessário, ele também funciona sem problemas em estilo A1
http://msdn.microsoft.com/en-us/library/bb208529.aspx
2) eu encontrei esta maneira de escrever a partir
http://www.dailydoseofexcel.com/archives/2005/01/10/entering-long-array-formulas-in-vba/
Solução
Eu acredito que o argumento de "substituição" é muito longo. Você precisa manter essa seqüência menos de 255 caracteres. Colocar mais da fórmula para a linha Selection.FormulaArray para que a substituição é menos de 255 caracteres.
Outras dicas
Vamos analisar a sua substituição:
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) mudança Sheet4!A1:HM232+Sheet5!A1:HM232
para 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) colar as partes quebradas de volta juntos:
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) mudança IF(X=2,0,X)
para Y
:
Replacement:="IF(Y+Y=2,0,Y+Y)"
(4) algum tipo de avaliação:
- Se X é 2, Y é 0, e o resultado é 0.
- Se X é 1, Y é 1, e o resultado é 0.
- Se X é qualquer outra coisa, Y é X, eo resultado é 2 * X.
(5) de modo que a fórmula é equivalente a:
Replacement:="IF(OR(X=2,X=1),0,2*X)"
(6) de modo que o próximo passo seria substituir X (passo 1 no sentido inverso) ...
Eu só vou deixá-lo com uma ou duas perguntas: Como é que se tornou tão confuso? Você já ouviu falar de "seca" (Do not Repeat Yourself)?