Мой код работает, как показано ниже, но в зависимости от количества рабочих книг, с которыми я сталкиваюсь, возникает ошибка Pastespecial method of range class failed
. Ошибка произошла где-то от 3 рабочих книг, импортирующих до самого высокого, который я получил в тестах до сих пор - 240/300. Это началось довольно неплохо, но сейчас мне повезло с большим выбором повторяющегося кода, описанного ниже.
Вот некоторые ключевые компоненты того, что я делаю:
- В комбинированном рабочем листе есть кнопка макроса на вкладке «Входы»
- На вкладке «Входы» указаны диапазоны, в которые необходимо скопировать конкретный лист на лист «data1»
- 'calc_page' имеет список путей импорта, которые могут изменяться в зависимости от того, в какой папке находится рабочая книга. Они ссылаются на связанные пути рабочей книги, которые я хотел бы импортировать в диапазоны, указанные в компоненте 2
Вот основные шаги, которые я хочу выполнить:
- Открыть рабочую книгу, скопировать определенный диапазон из этой ссылки на рабочую книгу с косвенным
- Вставить данные рабочей книги в указанный диапазон на листе «data1» [это изменяется в зависимости от того, какой диапазон у меня в списке]
- Очистить буфер обмена и выйти из рабочей книги
- Запустить процесс для следующего файла в диапазоне
Я перепробовал несколько сценариев в стеке с аналогичными результатами.
Поскольку это длительный процесс, я вызываю список других макросов, настроенных аналогичным образом. Я сократил код ниже, но у каждого макроса есть около 45 непосредственно закодированных ссылок.
Sub ImportDataFromList()
Dim App As New Excel.Application 'create new hidden Excel window
' Assign active sheet for copying
Dim wsActive As Worksheet
Set wsActive = Sheets("data1")
'Open designated file in new Excel window as read only
Dim wbImport As Workbook
Set wbImport = App.Workbooks.Open(Filename:=Worksheets("calc_page").Range("C5"), UpdateLinks:=True, ReadOnly:=True)
Set wsActive = Sheets("data1")
'Copy the data to active sheet
wbImport.Worksheets("Sheet1").Range("A1:N125").Copy
wsActive.Range([indirect("P5")]).PasteSpecial xlPasteValues
App.CutCopyMode = False 'Clears clipboard
wbImport.Close SaveChanges:=False 'Close new Excel window without saving
App.Quit 'Quit new Excel window
Application.Wait (Now + TimeValue("00:00:01"))
Set wbImport = App.Workbooks.Open(Filename:=Worksheets("calc_page").Range("C6"), UpdateLinks:=True, ReadOnly:=True)
Set wsActive = Sheets("data1")
'Copy the data to active sheet
wbImport.Worksheets("Sheet1").Range("A1:AJ74").Copy
wsActive.Range([indirect("P6")]).PasteSpecial xlPasteValues
App.CutCopyMode = False 'Clears clipboard
wbImport.Close SaveChanges:=False 'Close new Excel window without saving
App.Quit 'Quit new Excel window
Application.Wait (Now + TimeValue("00:00:01"))
End Sub
Я хочу, чтобы он мог запускаться из конца в конец без специальной ошибки и успешно импортировать все значения открытого текста из этого списка рабочих книг. Действительно ценю любые рекомендации или даже потенциальные идеи о том, как я могу заставить это работать. Спасибо!