2009-06-29 6 views
0

Salut Pourquoi dois-je obtenir l'erreur d'exécution 13: erreur d'incompatibilité de type tout en exécutant le je sais que FormulaArray doit être dans le style R1C1 code suivantexcel 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) ... mais le style A1 n'est pas nécessaire, cela fonctionne aussi sans aucun problème dans le style A1

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

2) i trouvé cette façon d'écrire de

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

Répondre

0

Je crois que l'argument "remplacement" est trop long. Vous devez garder cette chaîne sous 255 caractères. Mettez plus de la formule dans la ligne Selection.FormulaArray afin que le remplacement est inférieur à 255 caractères.

4

Analysons votre remplacement:

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) changement 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) coller les morceaux brisés ensemble:

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) changer IF(X=2,0,X) à Y:

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

(4) une certaine évaluation:

  • Si X est égal à 2, Y est 0, et le résultat est égal à 0.
  • Si X est égal à 1, Y est 1, et le résultat est Si 0 est autre chose, Y est X et le résultat est 2 * X.

(5) de sorte que la formule est équivalente à:

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

(6) de sorte que la prochaine étape consisterait à remplacer X (étape 1 dans le sens inverse) ...

I » Je vais juste vous laisser avec une question ou deux: Comment est-ce devenu si désordonné? Avez-vous entendu parler de "DRY" (Ne vous répétez pas)?