2013-06-02 153 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(用直接公式替换循环...)更简单,它具有更多** **更快的性能! –