Combine várias planilhas em uma planilha enquanto exclui algumas planilhas

1

Eu tenho 5 pessoas que mantêm seus próprios arquivos do Excel. Todos os arquivos têm uma aba que me interessa com a mesma estrutura de dados (colunas) e mais 20.000 linhas cada. Eu preciso puxar essa guia de cada folha, e não de quaisquer outras guias que elas possam ter, para uma planilha mestre.

Para fazer isso, criei uma pasta de trabalho mestre e adicionei um link de dados a cada uma das pastas de trabalho individuais e criei uma guia para extrair os dados desejados das pastas de trabalho individuais. Em seguida, uso o script VBA abaixo para criar uma guia principal que combina todos os dados das minhas guias criadas. Se isso importa, todos esses arquivos são hospedados como documentos no 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

Minha pergunta é dupla.

Primeiro, existe uma maneira melhor de fazer isso com menor sobrecarga? Temos 40 colunas e mais de 100.000 linhas, então a folha se move em um ritmo de caracóis e trava regularmente. (estamos construindo uma solução não-excel, mas precisamos que isso funcione até que isso seja feito)

Em segundo lugar, existe uma maneira de editar o script acima para 1. Continuar a atualizar a Planilha criada? E 2. excluir guias específicas na minha planilha, como as chamadas reports e dashboard ?

    
por MaskedPlant 20.09.2018 / 18:22

1 resposta

2

O código abaixo escrito ajudará você a copiar folhas específicas para a pasta de trabalho do 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

Nota:

  • Você pode editar este código VBA para adicionar quantas Folhas de trabalho copiar, como uma matriz. Worksheets(Array("sheet1","sheet2")) .
  • Caso você queira que Copie a pasta de trabalho inteira , o método mais rápido que posso sugerir é:

    ThisWorkbook.saveas Filename:=NewFileNameWithPath, Format:=xlOpenXMLWorkbook
    
por 21.09.2018 / 08:55