Я скопировал ваш код в новую книгу. Я переименовал рабочий лист Лист1 в C24D25 и создал строку заголовка:
A B C D E F
1 Workbook Worksheet C24 D24 C25 D25
В верхней части вашего обычный я добавил дополнительные переменные и константу I Требуется:
Const colTgtWbk As Long = 1
Const colTgtWsht As Long = 2
Const colTgtC24 As Long = 3
Const colTgtC25 As Long = 5
Dim wshtTarget As Worksheet
Dim rowTgtCrnt As Long
Set wshtTarget = ActiveWorkbook.Worksheets("C24D25")
rowTgtCrnt = 2
Заменить «C24D25» с вашим именем для рабочий лист, на который собираются значения.
Я изменил определение sPath
в папку на моем ноутбуке, содержащую несколько книг.
В верхней части кода я закомментирована:
'On Error GoTo ErrHandler
и ближе к концу я закомментирована:
'ExitHandler:
'Exit Sub
'ErrHandler:
'MsgBox Err.Description, vbExclamation
'Resume ExitHandler
Я никогда не включают в свой собственный обработчик ошибок в процессе разработки, и я никогда не включать один в макросе производства, если я не обнаружил необходимость во время разработки. Процедура обработчика ошибок не является лучшим методом обработки ошибок, которые вы ожидаете и можете проверить. Они должны быть зарезервированы за ошибки, которые вы не можете проверить, например, при попытке открыть файл, для которого у вас может не быть разрешения на чтение.
Вокруг основного блока:
Set wbkSource = Workbooks.Open(Filename:=sPath & sFile, AddToMRU:=False)
to
wbkSource.Close SaveChanges:=False
Я добавил, если:
If sFile <> wbkTarget.Name Then
End If
Это позволяет избежать попытки вновь открыть книгу, в которой вы собираете данные.
Я удалил:
With wbkTarget
wSource.Copy After:=.Sheets(.Sheets.Count)
End With
и заменил этот код:
With wshtTarget
.Cells(rowTgtCrnt, colTgtWbk).Value = wbkSource.Name
.Cells(rowTgtCrnt, colTgtWsht).Value = wSource.Name
wSource.Range("C24:D24").Copy Destination:=.Cells(rowTgtCrnt, colTgtC24)
wSource.Range("C25:D25").Copy Destination:=.Cells(rowTgtCrnt, colTgtC25)
rowTgtCrnt = rowTgtCrnt + 1
End With
Это код, который создает строки в рабочий лист C24D25.
В нижней части я добавил:
wshtTarget.Columns.AutoFit
Это расширяет столбцы для ширины найденных данных.
В результате изменений выше:
Option Explicit
Sub CopyWorksheets()
Const colTgtWbk As Long = 1
Const colTgtWsht As Long = 2
Const colTgtC24 As Long = 3
Const colTgtC25 As Long = 5
Dim wshtTarget As Worksheet
Dim rowTgtCrnt As Long
Set wshtTarget = ActiveWorkbook.Worksheets("C24D25")
rowTgtCrnt = 2
Const sPath = "C:\DataArea\SOTest\Excel\"
Dim sFile As String
Dim wbkSource As Workbook
Dim wSource As Worksheet
Dim wbkTarget As Workbook
Application.ScreenUpdating = False
Set wbkTarget = ActiveWorkbook
sFile = Dir(sPath & "*.xls*")
Do While sFile <> ""
If sFile <> wbkTarget.Name Then
Set wbkSource = Workbooks.Open(Filename:=sPath & sFile, AddToMRU:=False)
For Each wSource In wbkSource.Worksheets
With wshtTarget
.Cells(rowTgtCrnt, colTgtWbk).Value = wbkSource.Name
.Cells(rowTgtCrnt, colTgtWsht).Value = wSource.Name
wSource.Range("C24:D24").Copy Destination:=.Cells(rowTgtCrnt, colTgtC24)
wSource.Range("C25:D25").Copy Destination:=.Cells(rowTgtCrnt, colTgtC25)
rowTgtCrnt = rowTgtCrnt + 1
End With
Next
wbkSource.Close SaveChanges:=False
End If
sFile = Dir
Loop
wshtTarget.Columns.AutoFit
Application.ScreenUpdating = True
End Sub
Я надеюсь, что цели изменений, которые я сделал очевидны, задавайте вопросы, если это необходимо.
Вы говорите, что хотите скопировать C24, C25 и D24, D25 из всех файлов .xls в папку «C: \ MyPath». Я предполагаю скопировать их в 'wbkTarget', но где в' wbkTarget'? Например, вы можете скопировать их по столбцам C, D, E и F одного листа с столбцами A и B, зарезервированными для имен исходных книг и рабочих листов. –
Извините, я пропустил, что хочу, чтобы каждый файл C24, C25 и D24, D25 на столько листов в wbkTarget с их соответствующими именами – DoIt
Правильно ли я понял? Если в «C: \ MyPath» есть 20 файлов с тремя листами, вы хотите создать 60 рабочих листов в активной книге. Каждый из этих 60 листов должен быть пустым, за исключением C24: D25. Ты уверен? Это кажется очень расточительным пространством. При использовании старой версии Excel, которую я использую, добавление пустой рабочей таблицы добавляет 2048 байт к размеру книги. Поэкспериментируйте со своей версией Excel. Вы хотите, чтобы в новых листах были имена, соответствующие исходным рабочим листам. У всех исходных листов есть уникальные имена? –