Hazmat HN Ответов: 2

Объединение нескольких книг в одну основную книгу


Я работаю над объединением нескольких рабочих книг первого листа в основной рабочий лист с помощью кода MS Office 2013 VBA. Все работает нормально, за исключением того, что при копировании данных из исходных листов он копирует только их часть (например, лист А имеет 190 столбцов, а лист в-250 столбцов, а лист с-так далее... но он импортирует только 16 столбцов из листа А и 10 из листа В, но не все из них), вот код, который я написал для него:


Любая помощь будет очень признательна :)

Что я уже пробовал:

Sub simpleXlsMerger()
Dim bookList As Workbook
Dim mergeObj As Object, dirObj As Object, filesObj As Object, everyObj As Object
Application.ScreenUpdating = False
Set mergeObj = CreateObject("Scripting.FileSystemObject")
 
'change folder path of excel files here
Set dirObj = mergeObj.Getfolder("C:\Users\hnoorzai\Desktop\Newfolder")
Set filesObj = dirObj.Files
For Each everyObj In filesObj
    Set bookList = Workbooks.Open(everyObj)
 
    'Change B3:H to the range your working on and also B in B65536 to any column required.
    bookList.Worksheets(1).Range("B3:H" & Range("B65536").End(xlUp).Row).Copy
ThisWorkbook.Worksheets(1).Activate
 
    'Below only change "B" column name to your required column name
    Range("B65536").End(xlUp).Offset(1, 0).PasteSpecial
    Application.CutCopyMode = False
    bookList.Close
Next
End Sub

Richard Deeming

Я был бы удивлен, если бы этот код копировал более семи столбцов, так как вы сказали ему копировать только столбцы B в H.

Hazmat HN

Да, я сделал это, потому что все мои данные находятся в этих 7 столбцах, но строк больше 7 !!! так не могли бы вы помочь мне с этим @richard deeming ?

Richard Deeming

Так что же это? Ваш вопрос говорит о том, что он не копирует все столбцы, но ваш комментарий говорит, что он не копирует все строки.

Hazmat HN

@Richard Deeming oops извините, что я имел в виду строки, но любые способы, которыми эта проблема решается сейчас, но не могли бы вы помочь сейчас иногда это дает ошибку " Ошибка времени выполнения '1004' " при импорте данных из исходных листов

2 Ответов

Рейтинг:
0

Richard MacCutchan

Видеть Диапазон.Свойство Ячеек (Excel)[^] о том, как использовать числа только для создания объекта диапазона.


Hazmat HN

@Richard MacCutchan прямо сейчас мой код работает, но единственная проблема, которую я получаю, заключается в том, что всякий раз, когда количество книг увеличивается более чем на 5 в папке, из которой я импортирую листы, я получаю эту ошибку: "Ошибка времени выполнения 1004"
Есть ли вообще способ обойти эту проблему ?

Richard MacCutchan

Когда вы получаете сообщение об ошибке, которое вы не понимаете, вы всегда должны сначала спросить об этом Google: см. https://www.google.com/search?q=время выполнения+ошибка+1004.

Рейтинг:
0

Patrice T

Вы можете легко получить количество используемых строк и столбцов с помощью

myrows= bookList.Worksheets(1).UsedRange.RowS.Count
mycols= bookList.Worksheets(1).UsedRange.ColS.Count


Excel может напрямую копировать рабочие листы между книгами.
Sheets(1).Copy After:=MyBook.Sheets(MyBook.Sheets.Count)


Обратите внимание, что Excel 2013 обрабатывает гораздо больше, чем 65536 строк.


Hazmat HN

@ppolymorphe прямо сейчас мой код работает, но единственная проблема, которую я получаю, заключается в том, что всякий раз, когда количество книг увеличивается более чем на 5 в папке, из которой я импортирую листы, я получаю эту ошибку: "Ошибка времени выполнения 1004"
Есть ли вообще способ обойти эту проблему ?

Patrice T

Во время этого процесса вы, вероятно, откроете книгу, отличную от других, и выбор диапазона завершится неудачей.
Используйте отладчик, чтобы увидеть, где проблема в коде и в WB.
есть ли у вас проблема, если вы сначала обработаете этот ВБ ?
Защита WS также может быть вашей проблемой. Трудно сказать более отдаленно.