Копирование листов Excel из другой книги

Вопрос или проблема

Я пытаюсь копировать листы из другой рабочей книги, но проблема в том, что я хочу начать копирование листов с определенного листа, название которого я знаю.

Я попытался адаптировать несколько кодов, которые копируют все листы, но у меня не получается.

Вот пример моего кода:

Sub CreationDeBaseDeDonneesAvril2018()

Worksheets.Add After:=ThisWorkbook.ActiveSheet

Dim Counter As Integer
Dim ws As Worksheet

Dim FirstMonth As Integer
Dim i As Integer
Dim wb As Workbook

Set wb = Workbooks.Open(")

For Each ws In wb                          
If ws.Name = "01m" Then
Exit For                          
End If
Next
ws.Activate
Counter = activeworksheet.Count

For i = Counter To ActiveWorkbook.Worksheets.Count

Worksheets(i).Copy After:=ThisWorkbook.Worksheets(1)

Next
End Sub

Заранее благодарю за вашу помощь

Этот код VBA (Macro) поможет вам скопировать определенные листы из закрытой рабочей книги в текущую рабочую книгу.

Sub CopyFromClosedWBK()

Dim wbSource As Workbook
Dim wbTarget As Workbook
Dim Sht As Worksheet

Set wbTarget = ThisWorkbook
Set wbSource = Workbooks.Open("C:\FolderName\WhicheverFile.xlsm")
wbSource.Sheets("Sheet2").Copy After:=wbTarget.Sheets("Sheet4")
wbSource.Close
End Sub

N.B

  • Путь к файлу с исходной книгой, а также название папки
    и имя листа редактируемые.
  • Вы можете добавить столько листов для копирования, используя
    wbSource.Sheets("Sheet2").Copy After:=
    в командной строке.

Ответ или решение

Вопрос, который вы подняли, касается копирования листов из одного рабочего Excel-файла в другой посредством использования макросов VBA. Задача осложняется тем, что вы хотите начать этот процесс с определенного листа, имя которого вам известно. Давайте рассмотрим, как можно решить эту проблему, исчерпывающе и близко к вашему коду.

Теория: Продвинутое копирование листов в Excel с использованием VBA

VBA (Visual Basic for Applications) — это мощный инструмент для автоматизации задач в приложениях Microsoft Office. Копирование листов между рабочими книгами с его помощью позволяет значительно сократить рутинные ручные операции.

Основная задача — начать копирование с листа, имя которого нам известно, и продолжить копирование всех последующих листов. Для этого мы можем использовать цикл, чтобы найти нужный лист, и затем скопировать все листы, которые идут за ним.

Пример: Существующий код

Ваш текущий код содержит несколько логических шагов, но имеет некоторые недостатки в части напрямую работающей логики и возможных ошибок. Основные моменты кода включают:

  1. Открытие рабочего файла: ваш код пытается открыть файл, но требует доработки пути к файлу.
  2. Поиск и переход на нужный лист: ваш цикл при нахождении определенного листа использует оператор Exit For, что правильно выводит из цикла, но затем wm.Activate может вызвать ошибку, если указанного листа, "01m", не существует.
  3. Копирование листов: с использованием счетчика вы пытаетесь скопировать листы, однако структура цикла может быть более ясной и эффективной.

Применение: Оптимизированный код VBA

Давайте создадим улучшенный и более понятный скрипт:

Sub CopySheetsStartingFromSpecificSheet()

    Dim wbSource As Workbook
    Dim wbTarget As Workbook
    Dim ws As Worksheet
    Dim startCopying As Boolean
    Dim startSheetName As String

    ' Инициализация переменных
    startCopying = False
    startSheetName = "01m" ' Имя листа, с которого начинается копирование
    Set wbTarget = ThisWorkbook

    ' Открытие рабочей книги, из которой будем копировать листы
    Set wbSource = Workbooks.Open("C:\FolderPath\SourceWorkbook.xlsx")

    ' Поиск нужного листа и начало копирования
    For Each ws In wbSource.Worksheets
        If ws.Name = startSheetName Then
            startCopying = True
        End If

        ' Начало копирования, если достигнутый лист имеет заданное имя
        If startCopying Then
            ws.Copy After:=wbTarget.Sheets(wbTarget.Sheets.Count)
        End If
    Next ws

    ' Закрытие источника после завершения копирования
    wbSource.Close SaveChanges:=False

End Sub

Пояснения к коду:

  1. Структура цикла For Each: мы используем цикл для итерации по всем листам в wbSource. Переменная startCopying установлена в True после нахождения нужного листа, в результате чего все последующие листы копируются.

  2. Безопасность и обработка ошибок: по завершении выполнения всех операций, wbSource закрывается без сохранения изменений. Это важно, чтобы защить оригинальные данные от случайных изменений во время исполнения макроса.

  3. Гибкость и масштабируемость: путь к файлу и имя начального листа заданы через переменные, это позволяет легко адаптировать макрос под различные сценарии использования.

Заключение:

Используя подход, предложенный в данном решении, вы сможете эффективно и корректно копировать листы из одного рабочего файла Excel в другой, точно контролируя начало процесса. Это — пример успешного применения VBA для ускорения и упрощения рабочих процессов в Excel.

Оцените материал
Добавить комментарий

Капча загружается...