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/
Foi útil?

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)?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top