Ошибка времени выполнения "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
Благодарю.
2 ответа
Вы должны удвоить двойные кавычки:
n.formula = "=IF(AND(ISNUMBER(K39),ISNUMBER(L39))=TRUE,IF(ISNUMBER(M39),(K39-L39)*M39,(K39-L39)),"""")"
В вашей формуле есть пара синтаксических ошибок.
Одним из них является ""
используется как ваше ложное возвращаемое значение прекращает ваш n.formula
Строка рано.
Когда вы хотите использовать двойную кавычку ("
) внутри строки, которая разделена двойными кавычками, вам нужно экранировать внутренние кавычки, удваивая их.
Пример:
myString = "This is a "string"."
- Сбой, или в лучшем случае myString будет содержать This is a
,
Исправлено экранированием кавычек:
myString = "This is a ""string""."
- будет содержать This is a "string".
,
Кроме того, ваше истинное возвращаемое значение для первого IF является другим оператором IF. Этот внутренний оператор IF имеет свои запятые для разделения частей, но поскольку вы не инкапсулировали этот оператор, Excel может / будет думать, что его запятые являются частью внешнего оператора IF.
Поэтому заключите этот внутренний IF в скобки.
Вот исправленная формула (фактически не проверяла ее с данными, но теперь она проходит отладку):
=IF(AND(ISNUMBER(K39),ISNUMBER(L39))=TRUE, (IF(ISNUMBER(M39), (K39-L39)*M39, (K39-L39))), """")