Это мой первый пост здесь, поэтому я постараюсь обобщить ситуацию.
Я хотел бы отметить, что мои навыки программирования равны нулю, поэтому я взял кусочки нескольких кодов и попытался понять логику c, стоящую за ним, чтобы создать этот макрос. Будьте добры.
- Цель Кодекса: Копировать и вставить информацию из нескольких выбранных файлов в Активную книгу.
- Шаги:
Шаг 1. Создание рабочего листа в открытом файле
Шаг 2. Размещение заголовков на созданном рабочем листе
Шаг 3. Выбор нескольких файлов для копирования информации из
Шаг 4: Скопируйте содержимое выбранных файлов на рабочий лист, созданный на шаге 1
- Сам код
Dim fnameList, fnameCurFile, headers() As Variant
Dim wks, wksDst, DstSht, wsCopy, wsDest, ws, wksCurSheet As Worksheet
Dim wbkCurBook, wbkSrcBook, wb As Workbook
Dim CopyLastRow, DestLastRow As Long
'Step 1
Application.DisplayAlerts = False
On Error Resume Next
ActiveWorkbook.Sheets("Consolidate_Data").Delete
Application.DisplayAlerts = False
With ActiveWorkbook
Set DstSht = .Sheets.Add(After:=.Sheets(.Sheets.Count))
DstSht.Name = "Consolidate_Data"
End With
'Step 2
Application.ScreenUpdating = False
Set wb = ActiveWorkbook
Set ws = ActiveWorkbook.Sheets("Consolidate_Data")
headers() = Array("Superhero", "City", "State", "Country", "Publisher", "Demographics", _
"Planet", "Flying Abilities", "Vehicle", "Sidekick", "Powers")
For Each ws In wb.Sheets
With ws
.Rows(1).Value = "" 'This will clear out row 1
For i = LBound(headers()) To UBound(headers())
.Cells(1, 1 + i).Value = headers(i)
Next i
.Rows(1).Font.Bold = True
End With
Next ws
'Step 3
fnameList = Application.GetOpenFilename(FileFilter:="Microsoft Excel Workbooks (*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm", Title:="Selecione os arquivos", MultiSelect:=True)
If (vbBoolean <> VarType(fnameList)) Then
If (UBound(fnameList) > 0) Then
countFiles = 0
countSheets = 0
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Set wbkCurBook = ActiveWorkbook
For Each fnameCurFile In fnameList
countFiles = countFiles + 1
Set wbkSrcBook = Workbooks.Open(Filename:=fnameCurFile)
Next
For Each wksCurSheet In wbkSrcBook.Sheets
countSheets = countSheets + 1
Next
'Step 4
Set wsCopy = wbkSrcBook.Sheets("Relatório_Ouvidoria_monitoria")
Set wsDest = Workbooks("Novo(a) Planilha do Microsoft Excel.xlsm").Sheets("Consolidate_Data")
CopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Row
DestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Offset(1).Row
For Each wksCurSheet In wbkSrcBook.Sheets
wbkSrcBook.Sheets("Relatório_Ouvidoria_monitoria").Range("A2:M" & CopyLastRow).Copy _
wsDest.Range("A" & DestLastRow)
wbkSrcBook.Close Savechanges:=False
Next
MsgBox "Foram consolidados " & countFiles & " arquivos" & vbCrLf & "Foram importadas " & countSheets & " planilhas", Title:="Merge Excel files"
Else
MsgBox "Nenhum arquivo selecionado", Title:="Merge Excel files"
End If
End If
End Sub
- Проблема: На шаге 4 (или я так полагаю) макрос копирует информацию только из первого выбранного файла, оставляя другие позади.
Я не знаю, важно ли это: каждый файл я Выбор имеет только один лист с тем же именем. К сожалению, изменить имя рабочего листа не представляется возможным.
Можете ли вы, ребята, помочь мне?