Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Рабочий лист (создание, копирование, удаление)

    Создание, копирование, перемещение и удаление рабочих листов Excel с помощью кода VBA. Методы Sheets.Add, Worksheet.Copy, Worksheet.Move и Worksheet.Delete.

    Создание новых листов

    Создание новых рабочих листов осуществляется с помощью метода Sheets.Add.

    Синтаксис метода Sheets.Add

    expression.Add [Before, After, Count, Type]

    где expression — переменная, представляющая собой объект Sheet.

    Компоненты метода Sheets.Add

    • Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет добавлен новый.
    • After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет добавлен новый.
    • Count — необязательный параметр типа данных Variant, указывающий, сколько листов будет добавлено (по умолчанию — 1).
    • Type — необязательный параметр типа данных Variant, указывающий тип листа: xlWorksheet** (рабочий лист) или xlChart (диаграмма), по умолчанию — xlWorksheet.

    *Если Before и After не указаны, новый лист, по умолчанию, будет добавлен перед активным листом.

    **Для создания рабочего листа (xlWorksheet) можно использовать метод Worksheets.Add, который для создания диаграмм уже не подойдет.

    Примеры создания листов

    • Лист1 в After:=Лист1 — это уникальное имя листа, указанное в проводнике редактора VBA без скобок.
    • Лист1 в After:=Worksheets(«Лист1») — это имя на ярлыке листа, указанное в проводнике редактора VBA в скобках.

    Создаваемый лист можно присвоить объектной переменной:

    Если создаваемый лист присваивается объектной переменной, он будет помещен перед активным листом. Указать дополнительные параметры невозможно.

    Копирование листов

    Копирование рабочих листов осуществляется с помощью метода Worksheet.Copy.

    Синтаксис метода Worksheet.Copy

    expression.Copy [Before, After]

    где expression — переменная, представляющая собой объект Worksheet.

    Компоненты метода Worksheet.Copy

    • Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет добавлена копия.
    • After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет добавлена копия.

    *Если Before и After не указаны, Excel создаст новую книгу и поместит копию листа в нее. Если скопированный лист содержит код в проекте VBA (в модуле листа), он тоже будет перенесен в новую книгу.

    Примеры копирования листов

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

    Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.

    Перемещение листов

    Перемещение рабочих листов осуществляется с помощью метода Worksheet.Move.

    Синтаксис метода Worksheet.Move

    expression.Move [Before, After]

    где expression — переменная, представляющая собой объект Worksheet.

    Компоненты метода Worksheet.Move

    • Before* — необязательный параметр типа данных Variant, указывающий на лист, перед которым будет размещен перемещаемый лист.
    • After* — необязательный параметр типа данных Variant, указывающий на лист, после которого будет размещен перемещаемый лист.

    *Если Before и After не указаны, Excel создаст новую книгу и переместит лист в нее.

    Примеры перемещения листов

    Простые примеры перемещения листов:

    Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.

    Перемещение листа «Лист4» в позицию перед листом, указанным как по порядковому номеру, так и по имени ярлыка:

    Удаление листов

    Удаление рабочих листов осуществляется с помощью метода Worksheet.Delete

    Синтаксис метода Worksheet.Delete

    expression.Delete

    где expression — переменная, представляющая собой объект Worksheet.

    Примеры удаления листов

    Если рабочие книги указаны как элементы коллекции Workbooks, в том числе ActiveWorkbook и ThisWorkbook, листы нужно указывать как элементы коллекции Worksheets, использование уникальных имен вызовет ошибку.

    Как обратиться к рабочему листу, переименовать, скрыть или отобразить его с помощью кода VBA Excel, смотрите в этой статье.

    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    69 комментариев для “VBA Excel. Рабочий лист (создание, копирование, удаление)”

    1. Алексей

      Разобрался:

    2. Здравствуйте, Евгений! У меня есть код, который сохраняет данные ячеек таблицы в текстовый файл. К сожалению он при этом меняет формат ячеек на текстовый для правильного переноса данных. Формулы в ячейках при этом дальше не работают, если, например, забудешь выходя из программы ничего не сохранять. У меня есть идея создать копию текущего листа в фоне, лучше чтобы он вообще был невидимым, сохранить данные уже с него, а потом закрыть этот лист не сохраняя его. Возможно ли что-то в этом роде?

      1. Евгений

        Здравствуйте, Олег!
        Могу предложить следующий вариант, но с видимым листом:

    3. Александр

      Добрый день. Подскажите, как должен выглядеть код для следующей задачи:
      Необходимо два определенных листа из 10 (Реестр и Участники) с таблицами скопировать в новую книгу и сохранить под уникальным названием Дата_Реестр (2022-06-08_Реестр.xlsx)?

      1. Евгений

        Добрый день, Александр!

    4. Мария Озерная

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

      1. Мария Озерная

        нужен только код, который вставляет названия листов, спасибо

        1. Евгений

          Здравствуйте, Мария!
          Не знаю, какой код вам нужен, но, может быть, вам поможет пример вывода имен всех листов книги в первый столбец активного листа, за исключением имени самого активного листа:

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

    6. Здравствуйте, Евгений. Подскажите, пожалуйста, есть ли возможность отследить копирование листа в эту же книгу пользователем?

      1. Евгений

        Здравствуйте, Михаил!

        Код размещается в модуле книги.

    7. Спасибо, Евгений. Этот фокус я знаю. Но надеялся, что именно копирование можно отследить. Придется работать со списком листов.

    8. Option Explicit
      Sub MsgForEvg()
      MsgBox Prompt:="Евгений, дай Бог вам здоровья." & vbCrLf _
      & "Начитался комментов и понял что половина даже статью не прочла =(" & vbCrLf _
      & "Многие статьи тут читал, но на комменты не обращал внимания." _
      , Buttons:=vbOkOnly + vbInformation
      End Sub

    Обсуждение закрыто.