Я действительно новичок в VBA, и я недавно изучал основы и язык VBA на Youtube и в подобных сообществах. Поэтому любая помощь будет очень признательна!
Я пытаюсь объединить рабочие листы Excel из разных книг Excel в основную книгу Excel. Все книги Excel находятся в одном файле. Однако они названы по-другому, и у меня есть только частичные имена для книг Excel, например «ABG_RSPB_xxxxx-yyyy».
У меня будет основная книга в папке, в которой будут собраны данные из всех разных книг и листов. Каждая книга, из которой извлекаются данные, имеет только один лист, и шаблон на каждом листе одинаковый. У них такие же заголовки. Все книги имеют формат csv. Однако рабочие листы также имеют частичные имена (рабочий лист будет иметь то же имя, что и книга, в которой он находится).
В настоящее время у меня есть макрос, который предоставляет аналогичную функцию, однако он не может извлекать книги и рабочие листы с частичными именами.
Мы будем глубоко признательны за любую помощь по изменению макроса, позволяющему извлекать его из неполных рабочих книг и листов. Спасибо!
Текущий код:
Sub consolidation ()
Set mainWB = ActiveWorkbook
Dim mainPath As String
mainPath = ThisWorkbook.Path
Dim mainRowstart As Integer
mainRowstart = 2
Dim mainRC As Integer
mainRC = lastRow ("Consolidated Trades", "A") + 1
If mainRC < mainRowStart Then
mainRC = mainRowStart
EndIf
Dim fso As Object
Dim folder As Object
Dim files As Object
Set fso = CreateObject ("Scripting.FileSystemObject")
Set folderPaths = fso.getfolder (mainPath)
set filePaths = folderPath.files
Dim curFile As String
Dim curPath As String
Dim curRC As Integer
Dim curWSName As String
curWSName = ""
For Each filePath In filePaths
curPath = filePath
curFile = Split (curPath, "\")(UBound(Split(curPath, "\")))
If Left (curFile, 1) <> "~" Then
If curFile <> "ABG_RSPB_xxxxx=yyy.csv" Then
If Right (curFile, Len ("ABG_RSPB_xxxxx=yyy.xlsm")) = "ABG_RSPB_xxxxx=yyy.xlsm" Or _ Right (curFile, Len("ABG_RSPB_xxxxx=yyy.xls")) = "ABG_RSPB_xxxxx=yyy.xls" Then
Workbooks.Open Filename: = curPath
Workbooks (curFile).Activate
For Each ws In Worksheets
If ws.Name = "ABG_RSPB_xxxxx=yyy.csv" Then
curWSName = ws.Name
End If
Next Ws
curRC = lastRow(CurWSName, "A")
mainWB.Activate
mainRC = lastrow("Consolidated Trades", "A") + 1
If curRC >= 2 Then
mainWB.Worksheets("Consolidated Trades").Range("A" & mainRC & ":U: & mainRC + curRC - 2).Value = _ Workbooks(curFile).Worksheets(curWSName).Range("A2:U" & curRC).Value
mainWB.Worksheets("Consolidated Trades").Range("V" & mainRC).Value = curFile & "with" & curRC -1 & "Rows of Data"
EndIf
Workbooks(curFile).Close
EndIf
EndIf
EndIf
NextfilePath
MsgBox "Process Complete"
End Sub