excel Formula
-
21-08-2019 - |
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/
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)?