IFERROR function не может быть использован в качестве WorksheetFunction object. Формула будет работать до тех пор, пока не будет ошибки, но будет дросселировать, когда WorksheetFunction.IfError
вступает в игру, чтобы вернуть значение по умолчанию (например, строку нулевой длины).
Sub ject()
Dim result As Variant
'this works if a match is found
result = Application.WorksheetFunction.IfError(_
Application.WorksheetFunction.Index(Range("Sheet10!AC40:AC118"), _
Application.WorksheetFunction.Match(Range("Sheet10!E3"), Range("Sheet10!AD40:AD118"), 0)), "")
Debug.Print result
End Sub
Вместо этого вы можете попробовать Application.Evaluate method.
Sub jective()
Dim result As Variant
'this works on match or no match
result = Application.Evaluate("IFERROR(INDEX(Sheet10!AC40:AC118, " & _
"MATCH(Sheet10!E3, Sheet10!AD40:AD118, 0)), ""nothing"")")
Debug.Print result
End Sub
Как правило, может быть Application.Index(...
или WorksheetFunction.Index(...
но нет никакой необходимости в Application.WorksheetFunction.Index(...
.
Обращаясь к статическому адресу ячейки со строкой, обычно нет необходимости в абсолютных создателях $, поскольку строка не изменится. Одно из возможных исключений - это когда вы используете строку для заполнения большого количества ячеек формулой; не получая результат от оценки одной формулы.
Я не считаю, что функция [IFERROR] (https://support.office.com/en-us/article/IFERROR-function-F59BACDC-78BD-4924-91DF-A869D0B08CD5) может использоваться как [ Рабочий объектФункция] (https://msdn.microsoft.com/en-us/library/office/ff834434.aspx). Вы можете попробовать использовать метод [Application.Evaluate] (https://msdn.microsoft.com/en-us/library/office/ff193019.aspx). – Jeeped
@ Jeep. Я просто удалил часть iferror и все еще получаю ошибку. Тот же синтаксис просто удалил все части iferror –