0

我尝试将公式写入范围并收到以下消息:运行时错误'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
4

1 回答 1

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"")"
    

这样,您甚至不需要为参考而烦恼,因为 Excel 会自动应用正确的公式!

于 2013-06-03T07:39:27.587 回答