Я пробовал искать это через Интернет, но для своей цели я пока не смог оптимизировать код, необходимый , Это то, что я пытаюсь выполнить:Консолидация нескольких листов в нескольких книгах в одну книгу с теми же листами, но данные на нескольких листах будут объединены.
У меня есть файлы под названием Excel 1, Excel 2, Excel 3 и Master Excel. Все файлы имеют одинаковое количество рабочих листов, имя рабочего листа и одну и ту же структуру, когда дело доходит до заголовка и т. Д.
Я пытаюсь объединить значения Excel 1, Excel 2 и Excel 3 в главный файл.
Итак, если у вас есть лист с именем 1000, скопируйте в него диапазон из листа Excel 1 с именем 1000. Затем найдите лист 1000 в Excel 2 и скопируйте диапазон на пустую строку после последнего строка, используемая в Листе основных файлов 1000.
Диапазон всегда представляет собой строку после заголовка (это фиксируется на всех листах) до последней строки с данными определенного столбца.
Теперь в каждой книге есть несколько листов, и все рабочие листы будут иметь одинаковое имя.
Также путь к файлу будет постоянным, поэтому я не хочу выбирать.
Код, приведенный ниже, способен прокручивать рабочие листы, и я также могу определить диапазон скоростей копирования, но только с учетом того, что я не знаю, как сопоставить целевой лист с листом адресата, означающим данные листа 1000 в excel 1 файл, который будет вставлен в лист 1000 в основной файл.
Sub test()
Dim MyFile As String, MyFiles As String, FilePath As String
Dim erow As Long
'~~> Put additional variable declaration
Dim wbMaster As Workbook, wbTemp As Workbook
Dim wsMaster As Worksheet, wsTemp As Worksheet
FilePath = "\\AM01PCIFS01.global.root\HomeDirs$\yameen.sarwar\Desktop\Test\II1\"
MyFiles = "\\AM01PCIFS01.global.root\HomeDirs$\yameen.sarwar\Desktop\Test\II1\*.xlsx"
MyFile = Dir(MyFiles)
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
'~~> Set your declared variables
Set wbMaster = ThisWorkbook 'if you want to consolidate files in this workbook
Set wsMaster = wbMaster.Sheets("Sheet1") 'replace Sheet1 to suit
Do While Len(MyFile) > 0
'Debug.Print MyFile
If MyFile <> "master.xlsm" Then
'~~> Open the file and at the same time, set your variable
Set wbTemp = Workbooks.Open(Filename:=FilePath & MyFile, ReadOnly:=True)
Set wsTemp = wbTemp.Sheets(1) 'I used index, you said there is only 1 sheet
'~~> Now directly work on your object
With wsMaster
erow = .Range("A" & .Rows.Count).End(xlUp).Row 'get the last row
'~~> Copy from the file you opened
wsTemp.Range("A2:S20").Copy 'you said this is fixed as well
'~~> Paste on your master sheet
.Range("A" & erow).Offset(1, 0).PasteSpecial xlPasteValues
End With
'~~> Close the opened file
wbTemp.Close False 'set to false, because we opened it as read-only
Set wsTemp = Nothing
Set wbTemp = Nothing
End If
'~~> Load the new file
MyFile = Dir
Loop
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
End Sub
имен рабочих книг временных в вашем FilePath коррелирует с именами листов в ваших мастерах? – mongoose36
Нет, они не являются. Это случайные имена. Однако в каждой книге рабочие места называются точно такими же. –