excel 2003 vba:将公式写入单元格

时间:2013-06-02 15:26:43

标签: excel vba formula

我尝试将公式写入范围并获得以下消息:运行时错误“1004”:应用程序定义或对象定义的错误。我使用以下代码,但我不明白为什么这不起作用:

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 个答案:

答案 0 :(得分:1)

正如评论中已经指出的那样,您面临区域设置问题。 Range.Formula属性使用英语默认值,即您需要将德语分隔符;替换为,。这样可以确保您的代码可以在任何语言版本上运行。

为了完整性:您还可以使用Range.FormulaLocal属性,您可以在其中提供德语公式。但是,我强烈建议以只读方式使用此属性(如果有的话)。如果您使用此属性编写公式,那么您的代码将保证在任何非德国系统上中断!

您的代码还有两条评论:

  1. 目前,您在每个单元格中放置相同的公式而不调整行号,即每行将根据第2行中的输入具有相同的结果。您可以构建每个公式用计数器代替2。或者更容易,使用RC1表示法:

    cell.FormulaR1C1 = "=IF(RC[-5]=RC[-4],""OLD"",""NEW"")"
    
  2. 实际上没有必要循环并将公式分配给每个单元格。相反,只需用这一行替换你的For循环:

    Sheets("Target").Range("I2").Resize(LastRow-1).Formula= _
        "=IF(D2=E2,""OLD"",""NEW"")"
    
  3. 这样,您甚至不需要为引用而烦恼,因为Excel会自动应用正确的公式!