Quando estamos criando bases de dados que envolvem informações de bases legadas, ou planilhas antigas, onde em alguns casos precisamos juntas informações de centenas de planilhas, saber automatizar esta parte do processo parece ser bem importante.
Se você não for precisar deste código agora, pelo menos deixa essa página guardada nos seus 'Favoritos', certamente a utilizará no futuro.
Caso você deseja copiar os dados a partir de múltiplas planilhas e colá-los numa única e simples planilhas, poderá usar esse código.
Por exemplo, caso você tenha diversas planilhas gravadas numa única pasta, tal como:
a.xlsxb.xlsxc.xlsxd.xlsx
E em cada uma das planilhas você tivesse múltiplas pastas tais como: Jan, Fev, Mar etc., e você precisasse criar uma nova pasta com o nome de "Data".
Divirta-se
Option ExplicitOption ExplicitSub merge_multiple_workbooks()
Dim fldpathDim fld, fil, FSO As ObjectDim WKB As WorkbookDim wks As WorksheetDim j As Long, w As LongDim stcol As String, lastcol As Stringstcol = "A" ' Change the starting column of ur datalastcol = "C" ' Change the ending column of ur data' SHOW FOLDER DAILOG BOXWith Application.FileDialog(msoFileDialogFolderPicker).Title = "Choose the folder"'.InitialFileName = "c:\".ShowEnd WithOn Error Resume Nextfldpath = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1) & "\"If fldpath = False ThenMsgBox "Folder Not Selected"Exit SubEnd If' change sheet names hereApplication.ScreenUpdating = FalseApplication.DisplayAlerts = FalseApplication.Calculation = xlCalculationManualApplication.StatusBar = TrueApplication.StatusBar = "Please wait till Macro merge all the files"Set FSO = CreateObject("scripting.filesystemobject")Set fld = FSO.getfolder(fldpath)' browse through all files in source folderFor Each fil In fld.FilesIf UCase(Right(fil.Path, 5)) = UCase(".xlsx") And fil.Name <> ThisWorkbook.Name ThenSet WKB = Workbooks.Open(fil.Path)For Each wks In WKB.Sheetsw = wks.Range("a65356").End(xlUp).Row' stcol - starting column of my range eg - a'2 - as my data will start from row 2 because i do not want to copy headers again and again'lastcol - end column of range eg - c' w - last filled row in sheet/ ending row of my dataIf w >= 2 Thenwks.Range(stcol & "2:" & lastcol & w).Copy _Destination:=ThisWorkbook.Sheets(1).Range("a65356").End(xlUp).Offset(1, 0)End IfNextWKB.CloseEnd IfNextMsgBox "Done"Application.StatusBar = FalseApplication.Calculation = xlCalculationAutomaticApplication.ScreenUpdating = TrueApplication.DisplayAlerts = True
End Sub
Reference:
Tags: VBA, Excel, Tips, folder, pasta, diretório, subdiretório, Get, sub folder, names
Nenhum comentário:
Postar um comentário