1

Я пытался скопировать формулу из 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 ответа2

1

Вы должны удвоить двойные кавычки:

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

В вашей формуле есть пара синтаксических ошибок.

Одним из них является "" используемое, поскольку ваше ложное возвращаемое значение завершает вашу строку 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))), """")

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .