2017-09-19 8 views
0

Unten ist mein CodeExcel-VBA-Laufzeitfehler '1004'

Range("M2").Select 
Selection.FormulaArray = _ 
    "=IF(AND(RC8<=R1C,RC9>=EOMONTH(R1C,0)),INDEX(Planned!R2C:R100C,MATCH(1,(RC3=Planned!R2C3:R100C3)*(RC10=Planned!R2C10:R100C10)*(RC12=Planned!R2C12:R100C12),0)),ROUND((MAX(R1C[1]-MAX(RC8,R1C),0)-MAX(R1C[1]-MAX(RC9,R1C),0))*INDEX(Planned!R2C:R100C,MATCH(1,(RC3=Planned!R2C3:R100C3)*(RC10=Planned!R2C10:R100C10)*(RC12=Planned!R2C12:R100C12),0))/DAY(EOMONTH(R1C,0)),0))" 

Wenn ich versuche, Makro auszuführen es mir unter Error geben

enter image description here

Irgendwelche Gedanken dazu?

+0

Beachten Sie, dass 'Range.FormulaArray' auf 255 Zeichen begrenzt ist. –

+0

ohh..ist ihre Möglichkeit, diese Formel mit Makro anwenden. – Gautam

+0

Wie von @ pk_22 gesagt, könnten Sie eine 'Range (" M2 ") machen. FormulaArray =" = IF ("XXX", "YYY", "ZZZ" ")" '. Dann verwenden Sie 'Range.Replace'-Methode für die 3 Teile der' IF'-Funktion. Beachten Sie, dass jeder Ersatz selbst die gleiche 255-char-Beschränkung hat. –

Antwort

1

Können Sie Teile der Formel in Variablen speichern? Und dann die Variablen im Array Formula aufrufen? Um Charaktere zu sparen? Also spalte einfach die Gleichung.

So zum Beispiel:

var1 = DAY(EOMONTH(R1C,0)) 

und dann tauschen Sie es in Ihrer Formel. Tun Sie dies für mehrere Teile, die leicht durch eine Variable ersetzt werden können.

+0

Ich habe diese Methode auch versucht .. unter ist mein Code .. – Gautam

+0

'Bereich (" M2 "). FormulaArray =" = IF ("" XXX "", "" YYY "", " "ZZZ" ")" Bereich ("M2"). Ersetze was: = "XXX", Ersetzung: = "UND ($ H2 <=M$1,$I2> = EOMONTH (M $ 1,0))", MatchCase: = True Bereich (" M2 "). Ersetze was: =" YYY ", Ersetzung: =" INDEX (Geplant! M $ 2: M $ 100, MATCH (1, ($ C2 = Geplant! $ C $ 2: $ C $ 100) * ($ J2 = Geplant ! $ J $ 2: $ J $ 100) * ($ L2 = Geplant! $ L $ 2: $ L $ 100), 0)) ", MatchCase: = True Range (" M2 "). Ersetzen Was: =" ZZZ ", Ersatz: = "RUNDE ((MAX (N $ 1-MAX ($ H2, M $ 1), 0) -MAX (N $ 1-MAX ($ I2, M $ 1), 0)) * INDEX (Geplant! M $ 2: M $ 100, MATCH (1, ($ C2 = Geplant! $ C $ 2: $ C $ 100) * ($ J2 = Geplant! $ J $ 2: $ J $ 100) * ($ L2 = Geplant! $ L $ 2: $ L $ 100) , 0))/DAY (EOMONTH (M $ 1,0)), 0) ", MatchCase: = True" – Gautam

+0

Aber ich bekomme "in output" = IF ("AND ($ H2 <=M$1,$I2> = EOMONTH (M $ 1,0)) "," INDEX (P Lanned! M $ 2: M $ 100, MATCH (1, ($ C2 = Geplant! $ C $ 2: $ C $ 100) * ($ J2 = Geplant! $ J $ 2: $ J $ 100) * ($ L2 = Geplant! $ L $ 2: $ L $ 100), 0)) "," RUNDE ((MAX (N $ 1-MAX ($ H2, M $ 1), 0) -MAX (N $ 1-MAX ($ I2, M $ 1), 0)) * INDEX (Geplant! M $ 2: M $ 100, MATCH (1, ($ C2 = Geplant! $ C $ 2: $ C $ 100) * ($ J2 = Geplant! $ J $ 2: $ J $ 100) * ($ L2 = Geplant ! $ L $ 2: $ L $ 100), 0))/TAG (EOMONTH (M $ 1,0)), 0) ")' Gibt es eine Möglichkeit, dies zu entfernen (") – Gautam

0

bitte mit diesem ändern: (Sendkeys-Methode simuliert Tastenanschläge, die würden Sie manuell eingegeben im aktiven Fenster)

Range("M2").Select 
Selection.Formula = _ 
    "=IF(AND(RC8<=R1C,RC9>=EOMONTH(R1C,0)),INDEX(Planned!R2C:R100C,MATCH(1,(RC3=Planned!R2C3:R100C3)*(RC10=Planned!R2C10:R100C10)*(RC12=Planned!R2C12:R100C12),0)),ROUND((MAX(R1C[1]-MAX(RC8,R1C),0)-MAX(R1C[1]-MAX(RC9,R1C),0))*INDEX(Planned!R2C:R100C,MATCH(1,(RC3=Planned!R2C3:R100C3)*(RC10=Planned!R2C10:R100C10)*(RC12=Planned!R2C12:R100C12),0))/DAY(EOMONTH(R1C,0)),0))" 


SendKeys "{F2}" 
SendKeys "^+{ENTER}" 
+0

Kein Glück .. ihre Rückkehr zu #WERT! – Gautam

+0

Ihre Formel Länge ist über 255 Zeichen, deshalb haben Sie diesen Fehler –

+0

ich ändere meine Lösung und getestet jetzt funktioniert es !!! –

0

Ohne zu wissen, welche Daten in den verschiedenen Bereichen haben, funktioniert die folgende Arbeit ?

ActiveSheet.Range("M2").Activate 
With Selection 
    Selection.FormulaArray = _ 
    "=IF(AND(RC8<=R1C,RC9>=EOMONTH(R1C,0)),INDEX(Planned!R2C:R100C,MATCH(1, 
    (RC3=Planned!R2C3:R100C3)*(RC10=Planned!R2C10:R100C10)* 
    (RC12=Planned!R2C12:R100C12),0)),ROUND((MAX(R1C[1]-MAX(RC8,R1C),0)- 
    MAX(R1C[1]-MAX(RC9,R1C),0))*INDEX(Planned!R2C:R100C,MATCH(1, 
    (RC3=Planned!R2C3:R100C3)*(RC10=Planned!R2C10:R100C10)* 
    (RC12=Planned!R2C12:R100C12),0))/DAY(EOMONTH(R1C,0)),0))" 
End With 
+0

Kein Glück mit dieser Methode .. – Gautam