我试图将公式从 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)),"""")"