2016-02-14 3 views
0

Я считаю, что мой синтаксис неверен, может кто-нибудь подумает об этом?Функция рабочего листа с индексом/совпадением

Заранее спасибо

result = Application.WorksheetFunction.IfError(Application.WorksheetFunction.Index_ 
(Range("Sheet10!$AC$40:$AC$118"), Application.WorksheetFunction.Match(Range("Sheet10!E3"),_ 
Range("Sheet10!$AD$40:$AD$118"), 0)), "") 
+1

Я не считаю, что функция [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

+0

@ Jeep. Я просто удалил часть iferror и все еще получаю ошибку. Тот же синтаксис просто удалил все части iferror –

ответ

1

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(....

Обращаясь к статическому адресу ячейки со строкой, обычно нет необходимости в абсолютных создателях $, поскольку строка не изменится. Одно из возможных исключений - это когда вы используете строку для заполнения большого количества ячеек формулой; не получая результат от оценки одной формулы.

+0

BINGO. Я немного изменил его, чтобы заставить его работать (имея проверку на наличие ошибок в листах и ​​просто вернуть код vba в ячейку), но я попытался это сделать, и это сработало. Огромное спасибо –

Смежные вопросы