1

У меня есть 5 человек, каждый из которых поддерживает свой собственный файл Excel. Все файлы имеют вкладку, которая мне нужна, с той же структурой данных (столбцы) и более 20 000 строк в каждой. Мне нужно вытащить эту вкладку из каждого листа, а не из других вкладок, которые у них могут быть, в основной лист.

Для этого я создал основную рабочую книгу и добавил ссылку на данные для каждой из отдельных рабочих книг, а также создал вкладку, извлекающую нужные данные из отдельных рабочих книг. Затем я использую приведенный ниже скрипт VBA для создания главной вкладки, которая объединяет все данные из моих созданных вкладок. Если это имеет значение, все эти файлы размещаются как документы в SharePoint.

Sub Master()
Dim J As Integer
On Error Resume Next
Sheets(1).Select
Worksheets.Add
Sheets(1).Name = "Master"
Sheets(2).Activate
Range("A1").EntireRow.Select
Selection.Copy Destination:=Sheets(1).Range("A1")
For J = 2 To Sheets.Count
Sheets(J).Activate
Range("A1").Select
Selection.CurrentRegion.Select
Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select
Selection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(2)
Next
End Sub

Мой вопрос в два раза.

Во-первых, есть ли лучший способ сделать это с меньшими накладными расходами? У нас 40 столбцов и более 100 000 рядов, поэтому лист движется со скоростью улитки и регулярно фиксируется. (мы создаем решение не от Excel, но нам нужно, чтобы это работало, пока это не будет сделано)

Во-вторых, есть ли способ, которым я могу отредактировать приведенный выше скрипт в 1. Продолжить обновление созданного листа? И 2. исключить определенные вкладки на моем листе, например, с именами reports и dashboard?

1 ответ1

2

Нижеприведенный код поможет вам скопировать определенные листы в рабочую книгу Mater.

Sub CopySheets()

Dim sh as Worksheet,  wb as Workbook

Set wb = Workbooks("Target Workbook")
For Each sh in Workbooks("Source Workbook").Worksheets(Array("sheet1","sheet2"))
sh.Copy After:=wb.Sheets(wb.sheets.count)

Next sh

End Sub

Замечания:

  • Вы можете отредактировать этот код VBA, добавив столько рабочих листов для копирования, сколько и массив. Worksheets(Array("sheet1","sheet2")) .
  • Если вы хотите скопировать всю книгу, самый быстрый способ, который я могу вам предложить, это

    ThisWorkbook.saveas Filename:=NewFileNameWithPath, Format:=xlOpenXMLWorkbook
    

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .