Скопируйте значения из Листов другой книги в существующие листы

#excel #vba

Вопрос:

Мне нужно скопировать данные из (источника) Рабочая тетрадь в (пункт назначения) Рабочая книга с предварительно созданными существующими листами в целевой книге. Мне нужен код для циклического просмотра листов в исходном файле, копирования и вставки значений в указанные листы в пункте назначения. Есть более 100 листов, для которых это потребуется сделать.

Я нашел этот код в Интернете и пытаюсь изменить его в соответствии со своими потребностями. Проблема в том, что листы создаются после существующих листов, и мне нужно, чтобы данные были скопированы на уже существующие листы.

 Sub CopyWorkbook() Dim sh As Worksheet, wb As Workbook Set wb = Workbooks("Destination.xlsm") For Each sh in Workbooks("Origin.xlsm") sh.Copy After:=wb.Sheets(wb.Sheets.Count) Next sh End Sub  

Любая помощь будет очень признательна.

Комментарии:

1. Что связывает исходный лист с целевым листом, совпадают ли имена ?

2. Здравствуйте, я новичок в макросах, но я сделаю все возможное, чтобы ответить на этот вопрос. В исходной книге содержится много листов, которые необходимо вставить в целевую книгу. Т. е.: Исходный лист 1 должен быть вставлен в лист назначения 1, Исходный лист 2 должен быть вставлен в лист назначения 2, и так далее, и так далее, пока все листы не будут скопированы и вставлены.

3. Попробуй sh.Cells.Copy Destination:=wb.Sheets(sh.Index).Range("A1") .

4. Это именно то, что мне было нужно. Большое спасибо!

5. Знаете ли вы, как освободить некоторые рабочие листы от выполнения в этом коде?

Ответ №1:

Скопируйте листы в другую книгу

  • Следующие действия приведут к удалению существующих целевых листов и замене их новыми версиями исходных листов. Если исходный лист не существует в целевой книге, он будет скопирован в последнюю позицию.
 Option Explicit  Sub CopySheets()  Const ProcTitle As String = "Copy Sheets"    Const sExceptionsList As String = "Sheet1,Sheet2"  Const dFilePath As String = "C:Test202169957615Destination.xlsm"    Dim swb As Workbook: Set swb = ThisWorkbook ' workbook containing this code    Dim sExceptions() As String: sExceptions = Split(sExceptionsList, ",")    Dim sshCount As Long: sshCount = swb.Sheets.Count  Dim sshNames() As String: ReDim sshNames(1 To sshCount)    Dim ssh As Object  Dim sshName As String  Dim dIndex As Long  Dim n As Long     ' Write the Source Sheet Names to an array.  For Each ssh In swb.Sheets  sshName = ssh.Name  If IsError(Application.Match(sshName, sExceptions, 0)) Then  n = n   1  sshNames(n) = sshName  End If  Next ssh  If n lt; sshCount Then  sshCount = n  ReDim Preserve sshNames(1 To sshCount)  End If    Dim dwb As Workbook: Set dwb = Workbooks.Open(dFilePath)  Dim dshCount As Long: dshCount = dwb.Sheets.Count    Dim dsh As Object    Application.ScreenUpdating = False    For n = 1 To sshCount  sshName = sshNames(n)  Set ssh = swb.Sheets(sshName)  On Error Resume Next  Set dsh = dwb.Sheets(sshName)  On Error GoTo 0  If dsh Is Nothing Then ' copy new sheet  ssh.Copy After:=dwb.Sheets(dwb.Sheets.Count)  dshCount = dshCount   1  Else ' copy existing sheet  dIndex = dsh.Index  Application.DisplayAlerts = False  dsh.Delete  Application.DisplayAlerts = True  If dIndex = dshCount Then  ssh.Copy After:=dwb.Sheets(dIndex - 1)  Else  ssh.Copy Before:=dwb.Sheets(dIndex)  End If  End If  Set dsh = Nothing  Next n    Application.ScreenUpdating = True    MsgBox "Sheets copied.", vbInformation, ProcTitle   End Sub