运行时错误‘1004’;

运行时错误‘1004’;

我试图将公式从 N39 复制到最后一行,但总是出现运行时错误“1004”,请参阅以下行:

n.formula = "=IF(AND(ISNUMBER(K39),ISNUMBER(L39))=TRUE,IF(ISNUMBER(M39),(K39-L39)*M39,(K39-L39)),"")"

但是,当我尝试将公式更改为更简单的公式(例如 =L39-K39)时,代码可以正常工作。

我将非常感激任何能够帮助我解决代码问题的帮助。

这是我的代码

Sub FillDownFormula()
Dim LastRow As Long
Dim n As Range

LastRow = Cells(Rows.Count, "I").End(xlUp).Row

Set n = Range("N39:N" & LastRow)
n.formula = "=IF(AND(ISNUMBER(K39),ISNUMBER(L39))=TRUE,IF(ISNUMBER(M39),(K39-L39)*M39,(K39-L39)),"")"

Set n = Nothing

End Sub

谢谢。

答案1

您的公式中有几个语法错误。

其中之一被""用作错误返回值以提前终止n.formula字符串。

"当您想在由双引号分隔的字符串内使用双引号 ( ) 时,您需要通过将内部引号加倍来转义它们。

前任:

myString = "This is a "string"."- 将会失败,或者最多 myString 会包含This is a

通过转义引号来修复:

myString = "This is a ""string""."- 将包含This is a "string".

此外,第一个 IF 的 True 返回值是另一个 IF 语句。内部 IF 语句有自己的逗号来分隔各部分,但由于您没有封装该语句,Excel 可能会/会认为其逗号是外部 IF 语句的一部分。

因此,用括号封装内部 IF。

这是更正后的公式(实际上还没有用数据测试过,但现在已通过调试):

=IF(AND(ISNUMBER(K39),ISNUMBER(L39))=TRUE, (IF(ISNUMBER(M39), (K39-L39)*M39, (K39-L39))), """")

答案2

你必须翻倍双引号

n.formula = "=IF(AND(ISNUMBER(K39),ISNUMBER(L39))=TRUE,IF(ISNUMBER(M39),(K39-L39)*M39,(K39-L39)),"""")"

相关内容