2016-10-18 9 views
0

Я пытаюсь создать макрос, позволяющий автозаполнять данные из другой книги с помощью INDEX MATCH. Я использовал точный код для другой формулы, и он работает, но когда я просто заменяю формулу в приведенном ниже коде, он дает мне «определенную пользователем или объектную ошибку».Формула IFERROR INDEX/MATCH, имеющая определенную или определяемую объектом ошибку

Ниже приведен мой код. Соответствующая формула начинается после .formula. Остальная часть кода существует для автозаполнения пустых ячеек, и она уже работала с другим макросом.

Sub FillOrderType() 
Dim LR As Long 
LR = ActiveSheet.UsedRange.Find("*", SearchDirection:=xlPrevious, 
SearchOrder:=xlByRows).Row 
With Range("H2:H" & LR) 
With .SpecialCells(xlCellTypeBlanks) 
.Formula = "=IFERROR(INDEX('C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]EXP'!N:N, MATCH(G:G,'C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]EXP'!L:L,0)), IFERROR(INDEX('C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]AOG'!N:N,MATCH(G:G,'C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]AOG'!L:L,0)),IFERROR(INDEX('C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]SCHED'!M:M,MATCH(G:G,'C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]SCHED'!K:K,0)),"")))" 
End With 
.Value = .Value 
End With 

End Sub 

Любая помощь в определении проблемы была бы весьма признательна. И я прошу прощения за длинную формулу, я попытался ее обернуть, используя _, но это просто не сработало.

EDIT:

Я считаю, что этот вопрос лежит исключительно на самой формуле, поскольку она выдвигает на первый план, когда я пытаюсь отладки

=IFERROR(INDEX('C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]EXP'!N:N, MATCH(G:G,'C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]EXP'!L:L,0)), IFERROR(INDEX('C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]AOG'!N:N,MATCH(G:G,'C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]AOG'!L:L,0)),IFERROR(INDEX('C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]SCHED'!M:M,MATCH(G:G,'C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]SCHED'!K:K,0)),""))) 

Но у меня мало понятия о том, как преобразовать его в VBA код. В формуле значение, которое я хочу, лежит в разных листах в другой книге, и я использую IFERROR и INDEX MATCH для получения значений, которые я хочу.

+0

делает ИИТ работу, если вы только сделать 'диапазон («H2»). Формула = ...'? в этом случае сделайте это и используйте insetad функции fill down. Я не уверен, что это работает, когда вы пытаетесь сделать то, что вы сделали здесь. – Andreas

+0

Чтобы заполнить, выполните следующие действия: 'range (" H2: H "& LR) .filldown' – Andreas

+0

Привет, спасибо за быстрый ответ. Я пробовал делать «range» («H2»). Formula = 'и он дает мне ту же« определенную пользователем или объектную ошибку », выделяя формулу. Весь код сам по себе не имеет проблемы, потому что я использовал тот же самый код с другой формулой на другом макросе, и он работает –

ответ

0

Привет исправить это простое использование «» «» в последний iferrro вместо «» "=IFERROR(INDEX('C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]EXP'!N:N, MATCH(G:G,'C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]EXP'!L:L,0)), IFERROR(INDEX('C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]AOG'!N:N,MATCH(G:G,'C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]AOG'!L:L,0)),IFERROR(INDEX('C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]SCHED'!M:M,MATCH(G:G,'C:\Users\wwxuan\Desktop\KPI OUTBOUND 23.08.16\[KPI Outbound - (Aug) Rev5.xlsx]SCHED'!K:K,0)),"""")))"

+0

Oh. Мои. Бог. Мог бы поклясться, что я это пробовал. Решение настолько просто, что мне стало глупо. Благодаря! –

+0

Вы также знаете, есть ли способ обернуть формулу так, чтобы она соответствовала окну Visual Basic? Я попробовал '_', но просто не мог использовать его в середине формулы –

+0

@ Аndrew Я думаю, вам нужно избежать формулы с' '& _" ', но это было давно, так как я обернул такой код. Я обычно оставляю это так, как есть. – Andreas