Ошибка 1004 в этой строке:
Set MainRng = Workbooks(mainfile).Worksheets("Import Map").Range("A" & DS_StartRow & ":A" & DS_LastRow)
Означает, что что-то не так с параметрами, заданными для вызова Range
(неверные аргументы для Workbooks
или Worksheets
приведут к ошибке 9 / "индекс вне диапазона").
.Range("A" & DS_StartRow & ":A" & DS_LastRow)
Переменные DS_StartRow
и DS_LastRow
не объявляются и не присваиваются нигде в коде, который вы опубликовали до запуска этой инструкции.
Без Option Explicit
и при условии, что они не являются глобальными переменными, определенными в другом месте, похоже, что можно с уверенностью предположить, что их значение равно 0
.
.Range("A0:A0")
... недопустимо, так как адреса строк таблицы основаны на 1. Следовательно, выдается ошибка 1004.
Один из способов сузить проблему - разделить такие инструкции, выполняющие слишком много задач, на более мелкие операторы, которые выполняют одну вещь:
Dim wb As Workbook
Set wb = Workbooks(mainfile)
Dim ws As Worksheet
Set ws = wb.Worksheets("Import Map")
Dim map As Range
Set map = ws.Range("A" & DS_StartRow & ":A" & DS_LastRow)
Теперь гораздо проще точно определить, какая инструкция не выполняется.