Frage

hallo Warum erhalte ich den Laufzeitfehler 13: Typenkonfliktfehler während des folgenden Code ausgeführt

 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) Ich weiß, dass in Formula Z1S1 sein sollte ... aber A1 Stil ist nicht erforderlich, es funktioniert auch ohne Probleme in A1 Stil

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

2) fand ich diese Art und Weise von

des Schreibens
  http://www.dailydoseofexcel.com/archives/2005/01/10/entering-long-array-formulas-in-vba/
War es hilfreich?

Lösung

Ich glaube, das „Ersatz“ Argument ist zu lang. Sie müssen die Zeichenfolge weniger als 255 Zeichen zu halten. Setzen Sie mehr der Formel in die Selection.FormulaArray Linie, so dass der Austausch weniger als 255 Zeichen.

Andere Tipps

Sie analysieren Ihren Ersatz:

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) Änderung Sheet4!A1:HM232+Sheet5!A1:HM232 zu 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) klebt die Scherben wieder zusammen:

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) Änderung IF(X=2,0,X) zu Y:

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

(4) einige Auswertung:

  • Wenn X 2, Y 0, und das Ergebnis ist 0.
  • Wenn X 1, Y 1, und das Ergebnis ist   0.
  • Wenn X etwas anderes steht, Y für X, und die Ergebnis ist 2 * X.

(5), so dass die Formel entspricht:

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

(6), so ist der nächste Schritt wäre X (Schritt 1 in umgekehrter Richtung) zu ersetzen ...

Ich lasse Sie nur mit einer oder zwei Fragen: Wie es so chaotisch worden ist? Haben Sie schon von "DRY" zu hören (Do not Repeat Yourself)?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top