Prezados,
boa tarde,
Preciso de uma ajuda para comentar e se possível editar uma macro de consolidação de tabelas no Excel.
O código abaixo foi feito por um colega meu, onde ele consolidava todos os excel e funciona com sucesso.
Porém agora o layout dos arquivos que devem ser consolidados foram alterados e preciso com que a macro funcione novamente.... Está dificil.
Anteiormente, a parte dos títulos de cada arquivo era apenas a primeira linha.
Dessa vez o título de cada arquivo vai da linha A1 até a A11, e antes dele contar quantas colunas tem, deve desocultar as colunas assim que abrir o arquivo.
O resto é parecido, pois ele vai pegar todo o conteúdo e ir consolidando normalmente.
Alguém que entenda de VBA consegue me ajudar ?
Segue o código abaixo
Sub ConsolidarTabelas()
Dim SummarySheet As Worksheet
Dim FolderPath As String
Dim SelectedFiles() As Variant
Dim NRow As Long
Dim FileName As String
Dim NFile As Long
Dim WorkBk As Workbook
Dim SourceRange As Range
Dim DestRange As Range
Dim DestRangeRecebimento As Range
Dim PrimeiraLinha As Integer
Dim Ultimalinha As Integer
Dim NomeArquivo As String
Dim DataRecebimento As Date
Dim i As Integer
Dim iRow As Integer
Dim iColuna As Integer
Dim startTime As Single
Dim endTime As Single
Dim Msg As String
Dim Linhapreenchida
Application.ScreenUpdating = False
startTime = Timer
On Error Resume Next
'Criar um nova Pasta de Trabalho e definir uma variável para a primeira planilha.
Set SummarySheet = Workbooks.Add(xlWBATWorksheet).Worksheets(1)
'Modifique este caminho de pasta para apontar para os arquivos que você deseja usar.
FolderPath = ThisWorkbook.Sheets("Consolidar Tabelas").Range("F1").Value
'Define o diretório atual para o caminho da pasta.
ChDrive FolderPath
ChDir FolderPath
'Abre a caixa de diálogo dos arquivos em Excel que devem ser selecionados e consolidados
SelectedFiles = Application.GetOpenFilename(Title:="Selecione os arquivos", filefilter:="Excel Files (*.xl*), *.xl*", MultiSelect:=True)
'NRow mantém controle de onde inserir novas linhas na pasta de trabalho de destino.
NRow = 1
'Percorre a lista de nomes de arquivo retornados
For NFile = LBound(SelectedFiles) To UBound(SelectedFiles)
'Define FileName como o nome do arquivo de pasta de trabalho atual para abrir.
FileName = SelectedFiles(NFile)
'Abre a pasta de trabalho atual como somente leitura
Set WorkBk = Workbooks.Open(FileName, True, True)
'Define a célula na coluna A para numerar os arquivos.
SummarySheet.Range("A" & NRow).Value = NFile
PrimeiraLinha = SummarySheet.Range("B" & NRow + 1).Row
DataRecebimento = Replace(Left(Replace(FileName, FolderPath, ""), 10), ".", "/") & " " & Replace(Mid(Replace(FileName, FolderPath, ""), 12, 8), ".", ":")
SummarySheet.Range("B" & NRow).Value = "Data de Recebimento"
'Selecionar, copiar e colar o intervalo de dados
'Range(Selection, Selection.End(xlToRight)).Select
iRow = WorkBk.Worksheets(1).Range("A100000").End(xlUp).Row
iColuna = WorkBk.Worksheets(1).Range("A1").End(xlToRight).Column
Set SourceRange = WorkBk.Worksheets(1).Range(Cells(1, 1), Cells(iRow, iColuna))
'Defina o intervalo de destino para iniciar na coluna B e ser do mesmo tamanho que o intervalo de origem.
Set DestRange = SummarySheet.Range("C" & NRow).Resize(SourceRange.Rows.Count, SourceRange.Columns.Count)
'Copiar os valores da origem para o destino.
DestRange.Value = SourceRange.Value
Ultimalinha = NRow + DestRange.Rows.Count - 1
For i = PrimeiraLinha To Ultimalinha
SummarySheet.Range("B" & i).Value = DataRecebimento
Next i
'Aumentar NRow para que possamos saber onde copiar os dados a seguir.
NRow = NRow + DestRange.Rows.Count
'Feche a pasta de trabalho de origem sem guardar as alterações.
WorkBk.Close savechanges:=False
Set WorkBk = Nothing
Next NFile
endTime = Timer
NomeArquivo = "Planilhados " & Format(Now, "dd.mm.yyyy") & ".xlsx"
MsgBox FolderPath & NomeArquivo
SummarySheet.SaveAs FileName:=FolderPath & NomeArquivo ', FileFormat = xlWorkbookNormal
'Tempo de execução do consolidador
Msg:
Msg = NFile - 1 & " arquivo(s) consolidado(s) em" & Format(endTime - startTime, " 0 Segundos")
MsgBox Msg, vbInformation, "Tempo de execução"
Application.ScreenUpdating = True
End Sub
HELP!
Postado : 22/10/2019 11:20 am