Индекс IFERROR / формула СООТВЕТСТВИЯ, имеющая ошибку, определенную приложением или объектом

#excel #vba #formula #autofill

#excel #vba #формула #автозаполнение

Вопрос:

Я пытаюсь создать макрос, позволяющий мне автоматически заполнять данные из другой книги, используя СОПОСТАВЛЕНИЕ ИНДЕКСОВ. Я использовал точный код для другой формулы, и он работает, но когда я просто заменяю for formula в приведенном ниже коде, это выдает мне «ошибку, определяемую приложением или объектом»

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

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

End Sub
  

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

Редактировать:

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

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

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

Комментарии:

1. Работает ли iit, если вы только делаете range("H2").formula = ... ? в этом случае сделайте это и используйте функцию заполнения insetad. Я не уверен, что это работает, когда вы пытаетесь сделать так, как вы сделали здесь.

2. Для заполнения вы делаете: range("H2:H" amp; LR).filldown

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

4. Можете ли вы вручную вставить ту же формулу в ячейку?

5. Да, я могу. Вот почему я думаю, что проблема заключается только в формуле.

Ответ №1:

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

Комментарии:

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

2. Вы также знаете, есть ли какой-либо способ обернуть формулу так, чтобы она помещалась в окне Visual Basic? Я пытался _ , но просто не смог использовать его в середине формулы

3. @Andrew Я думаю, вам нужно экранировать формулу с " amp;_" помощью, но это было давно, так как я обернул такой код. Обычно я просто оставляю все как есть.