#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;_"
помощью, но это было давно, так как я обернул такой код. Обычно я просто оставляю все как есть.