2013-06-02 197 views
0

我試圖將公式寫入一個範圍並得到以下消息:運行時錯誤'1004':應用程序定義或對象定義的錯誤。我用下面的代碼,但我不明白爲什麼這不工作:excel 2003 vba:將公式寫入單元格

LastRow = Sheets("Source").Cells(Rows.Count, "B").End(xlUp).Row 

For Each cell In Sheets("Target").Range("I2:I" & CStr(LastRow)).Cells 

    cell.Formula = "=IF(D2=E2;""OLD"";""NEW"")" 

Next 
+1

請用','替換';'! –

+1

就是這樣。謝謝。 –

+0

在您使用的德語Excel版本中;而不是,對於公式,但顯然你必須使用,當你在VBA中編寫公式,然後你有;在細胞中。 –

回答

1

正如評論已經指出的,你面臨的問題與區域設置。 Range.Formula屬性使用英文默認值,即您需要用,替換德文分隔符;。這樣可以確保您的代碼可以在任何語言版本上運行。

爲了完整:您還可以使用Range.FormulaLocal屬性,您可以在其中提供德國公式。不過,我強烈建議使用這個屬性只讀(如果有的話)。如果您使用此屬性編寫公式,則代碼將保證在任何非德國系統上破解!您的代碼

兩個更多的評論,但:

  1. 此刻,你將在每個單元相同的公式不調整行數,即每行會具有基於相同的結果輸入第2行。您可以構建每個公式,用計數器替換2。或者更容易,使用RC1符號:

    cell.FormulaR1C1 = "=IF(RC[-5]=RC[-4],""OLD"",""NEW"")" 
    
  2. 其實沒有必要環路和公式分別分配給每個單元。相反,只需用這條線替換你的循環:

    Sheets("Target").Range("I2").Resize(LastRow-1).Formula= _ 
        "=IF(D2=E2,""OLD"",""NEW"")" 
    

這樣,你甚至不需要理會的參考,爲Excel自動應用正確的公式!

+1

對於建議#2 +1(用直接公式替換循環...)更簡單,它具有更多** **更快的性能! –