2017-09-19 204 views
0

下面是我的代碼Excel的VBA運行時錯誤 '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))" 

當我嘗試運行宏它給了我提示以下錯誤:

enter image description here

對此有何看法?

+0

請記住,'Range.FormulaArray'限於255個字符。 –

+0

ohh ..他們的任何方式來應​​用這個公式使用宏。 – Gautam

+0

正如@ pk_22所說,你可以做一個'Range(「M2」)。FormulaArray =「= IF(」「XXX」「,」「YYY」「,」「ZZZ」「)」「。然後對'IF'函數的3個部分使用'Range.Replace'方法。請記住,每個替換本身都有相同的255個字符限制。 –

回答

1

您是否可以將公式的部分內容保存在變量中?然後調用Formula數組中的變量?要保存字符?所以簡單地分解等式。

因此,例如:

var1 = DAY(EOMONTH(R1C,0)) 

,然後替換它的配方食品中。對於易於被變量替換的幾個零件,請執行此操作。

+0

我也嘗試過這種方法也..以下是我的代碼.. – Gautam

+0

Range(「M2」)。FormulaArray =「= IF(」「XXX」「,」「YYY」「, 「ZZZ」「)」 範圍(「M2」)替換內容:=「XXX」,替換:=「AND($ H2 <=M$1,$I2> = EOMONTH(M $ 1,0))」,MatchCase:= True Range (1,($ C2 =計劃中的!$ C $ 2:$ C $ 100)*($ J2 =計劃中的=「YYY」,替換爲:=「INDEX(計劃!M $ 2:M $ 100,MATCH !「$ J $ 2:$ J $ 100)*($ L2 =計劃!$ L $ 2:$ L $ 100),0))」,MatchCase:= True 範圍(「M2」)替換內容:=「ZZZ」,替換:=「ROUND((MAX(N $ 1- MAX($ H2,M $ 1),0)-MAX(N $ 1- MAX($ I2,M $ 1),0))* INDEX(計劃M $ 2:M! $ 100中,MATCH(1,(C2 $ =計劃$ C $ 2:$ C $ 100)*($ J2 =計劃$Ĵ$ 2:$Ĵ$ 100)*($ L2 =計劃$ L $ 2:$ L $ 100) ,0))/ DAY(EOMONTH(M $ 1,0)),0)「,MatchCase:= True' – Gautam

+0

但是我得到了」in output'= IF(「AND($ H2 <=M$1,$I2> = EOMONTH(M $ 1,0 )) 「」 INDEX(P lanned M $ 2:!M $ 100,MATCH(1,($ C2 =計劃$ C $ 2:$ C $ 100)*($ J2 =計劃$Ĵ$ 2:!$Ĵ$ 100)*($ L2 =計劃$ L $ 2:$ L $ 100),0)) 「」 ROUND((MAX(N $ 1- MAX($ H2,M $ 1),0)-MAX(N $ 1- MAX($ I2,M $ 1),0)) * INDEX(計劃M $ 2:!M $ 100,MATCH(1,($ C2 =計劃$ C $ 2:$ C $ 100)*($ J2 =計劃$Ĵ$ 2:$Ĵ$ 100)*($ L2 =計劃!$ L $ 2:$ L $ 100),0))/ DAY(EOMONTH(M $ 1,0)),0)「)'有什麼方法可以刪除這個(」) – Gautam

0

請這種變化: (SendKeys方法模擬按鍵,你會在活動窗口中手動輸入)

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

沒有運氣..您返回到#VALUE! – Gautam

+0

你的公式長度超過255個字符,這就是爲什麼你有這個錯誤 –

+0

我改變我的解決方案,現在測試它的工作原理! –

0

不知道你在各個領域的什麼數據,做了以下工作?

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

不用這種方法.. – Gautam