Таблицы VBA - полное руководство

Это полное руководство по работе с таблицами / листами в Excel.

Внизу этого руководства мы создали памятку общих команд для работы с листами.

Листы Vs. Рабочие листы

Есть два способа ссылаться на Таблицы с помощью VBA. Первый связан с объектом Sheets:

1 Таблицы ("Лист1"). Активировать

Другой - с объектом Worksheets:

1 Рабочие листы ("Лист1"). Активировать

В 99% случаев эти два объекта идентичны. Фактически, если вы искали в Интернете примеры кода VBA, вы, вероятно, видели, что используются оба объекта. Вот разница:

Коллекция Таблиц содержит Рабочие Таблицы И Таблицы диаграмм.

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

Ссылки на листы

Есть несколько способов ссылаться на Таблицы:

  • ActiveSheet
  • Имя вкладки листа
  • Индексный номер листа
  • Кодовое имя листа

ActiveSheet

ActiveSheet - это текущий активный лист. Другими словами, если вы приостановили код и посмотрели в Excel, то будет виден лист. В приведенном ниже примере кода будет отображаться окно сообщений с именем ActiveSheet.

1 MsgBox ActiveSheet.Name

Имя листа

Вы, вероятно, больше всего знакомы со ссылками на Таблицы по их имени вкладки:

1 Таблицы ("TabName"). Активировать

Индексный номер листа

Номер индекса листа - это позиция листа в книге. 1 - это первый лист. 2 - второй лист и т.д .:

1 Таблицы (1) .Активировать

Номер индекса листа - последний лист в книге

Чтобы ссылаться на последний лист в книге, используйте Sheets.Count, чтобы получить последний номер индекса:

1 Таблицы (Sheets.Count). Активировать

Лист «Кодовое имя»

Кодовое имя листа - это имя объекта в VBA:

1 CodeName.Activate

Ссылки на листы в других книгах

Также легко ссылаться на Таблицы в других книгах. Для этого вам нужно использовать объект Workbooks:

1 Книги ("VBA_Examples.xlsm"). Таблицы ("Лист1"). Активировать

Важный: Рабочая книга должна быть открыта, прежде чем вы сможете ссылаться на нее в Таблицах.

Активировать или выбрать лист

В другой статье мы обсудим все, что касается активации и выбора листов. Краткая версия такова:

Когда вы активируете лист, он становится ActiveSheet. Это тот лист, который вы бы увидели, если бы посмотрели в свою программу Excel. Одновременно можно активировать только один лист.

Активировать лист

1 Таблицы ("Лист1"). Активировать

Когда вы выбираете лист, он также становится ActiveSheet. Однако вы можете выбрать сразу несколько листов. Когда одновременно выбрано несколько листов, «верхним» листом является ActiveSheet. Однако вы можете переключать ActiveSheet на выбранных листах.

Выбрать лист

1 Таблицы ("Лист1"). Выберите

Выбрать несколько листов

Используйте массив для одновременного выбора нескольких листов:

1 Листы (Массив ("Лист2", "Лист3")). Выберите

Переменная рабочего листа

Назначение рабочего листа переменной позволяет ссылаться на рабочий лист по имени переменной. Это может сэкономить массу времени на вводе текста и упростить чтение кода. Есть также много других причин, по которым вы можете захотеть использовать переменные.

Чтобы объявить переменную рабочего листа:

1 Dim ws как рабочий лист

Назначьте рабочий лист переменной:

1 Установить ws = Sheets ("Sheet1")

Теперь вы можете ссылаться на переменную рабочего листа в своем коде:

1 ws.Activate

Перебирать все листы в книге

Переменные рабочего листа необходимы, когда вы хотите просмотреть все рабочие листы в книге. Самый простой способ сделать это:

12345 Dim ws как рабочий листДля каждого ws в листахMsgBox ws.nameСледующий ws

Этот код будет проходить через все рабочие листы в книге, отображая имя каждого рабочего листа в окне сообщения. Цикл по всем листам в книге очень полезен при блокировке / разблокировке или скрытии / отображении нескольких листов одновременно.

Защита рабочего листа

Защита книги

Защита книги блокирует ее от структурных изменений, таких как добавление, удаление, перемещение или скрытие листов.

Вы можете включить защиту книги с помощью VBA:

1 ActiveWorkbook.Protect Пароль: = "Пароль"

или отключить защиту книги:

1 ActiveWorkbook.UnProtect Пароль: = "Пароль"

Примечание: вы также можете защитить / снять защиту без пароля, опуская аргумент пароля:

1 ActiveWorkbook.Protect

Защита рабочего листа

Защита на уровне рабочего листа предотвращает внесение изменений в отдельные рабочие листы.

Защитить рабочий лист

1 Рабочие листы («Лист1»). Защитить «Пароль»

Снять защиту листа

1 Рабочие листы ("Лист1"). Снять защиту "Пароль"

Существует множество вариантов защиты рабочих листов (разрешить изменение форматирования, разрешить пользователю вставлять строки и т. Д.). Мы рекомендуем использовать средство записи макросов для записи желаемых параметров.

Мы обсуждаем защиту рабочего листа более подробно здесь.

Видимое свойство листа

Возможно, вы уже знаете, что рабочие листы можно скрыть:

На самом деле существует три параметра видимости рабочего листа: Видимый, Скрытый и Очень скрыто.Скрытые листы могут быть отображены любым обычным пользователем Excel, щелкнув правой кнопкой мыши в области вкладки листа (как показано выше). Листы VeryHidden можно отобразить только с помощью кода VBA или из редактора VBA. Используйте следующие примеры кода, чтобы скрыть / показать листы:

Показать рабочий лист

1 Листы ("Лист1"). Visible = xlSheetVisible

Скрыть рабочий лист

1 Листы ("Лист1"). Visible = xlSheetHidden

Очень скрыть рабочий лист

1 Листы ("Лист1"). Visible = xlSheetVeryHidden

События на уровне рабочего листа

События - это триггеры, которые могут вызывать запуск «процедур обработки событий». Например, вы можете запускать код каждый раз, когда изменяется какая-либо ячейка на листе или когда лист активируется.

Процедуры событий рабочего листа должны быть помещены в модуль рабочего листа:

Есть множество событий рабочего листа. Чтобы увидеть полный список, перейдите в модуль рабочего листа, выберите «Рабочий лист» в первом раскрывающемся списке. Затем выберите процедуру события из второго раскрывающегося списка, чтобы вставить ее в модуль.

Рабочий лист активировать событие

События активации рабочего листа запускаются каждый раз, когда рабочий лист открывается.

123 Личный вспомогательный лист_активировать ()Диапазон ("A1"). ВыберитеКонец подписки

Этот код будет выбирать ячейку A1 (сбрасывая область просмотра в левый верхний угол рабочего листа) каждый раз, когда рабочий лист открывается.

Событие изменения рабочего листа

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

Лист шпаргалки

Ниже вы найдете шпаргалку, содержащую общие примеры кода для работы с таблицами в VBA.

Шпаргалка по VBA Worksheets

Шпаргалка по рабочим листам VBA
ОписаниеПример кода
Ссылки и активация листов
Имя вкладкиТаблицы («Ввод»). Активировать
Кодовое имя VBASheet1.Activate
Позиция индексаТаблицы (1) .Активировать
Выбрать лист
Выбрать листТаблицы ("Ввод"). Выбрать
Установить переменнуюDim ws как рабочий лист
Установить ws = ActiveSheet
Имя / ПереименоватьActiveSheet.Name = "NewName"
Следующий листActiveSheet.Next.Activate
Цикл по всем листамDim ws как рабочий лист
Для каждого ws в листах
Msgbox ws.name
Следующий ws
Перебирать выбранные листыDim ws как рабочий лист
Для каждого ws в ActiveWindow.SelectedSheets
MsgBox ws.Name
Следующий ws
Получить ActiveSheetMsgBox ActiveSheet.Name
Добавить листТаблицы.Добавить
Добавить лист и имяSheets.Add.Name = "NewSheet"
Добавить лист с именем из ячейкиSheets.Add.Name = диапазон ("a3"). Значение
Добавить лист после другогоSheets.Add After: = Sheets ("Ввод")
Добавить лист после и имениSheets.Add (After: = Sheets ("Input")). Name = "NewSheet"
Добавить лист перед и имяSheets.Add (Before: = Sheets ("Input")). Name = "NewSheet"
Добавить лист в конец книгиSheets.Add After: = Sheets (Sheets.Count)
Добавить лист в начало книгиSheets.Add (Before: = Sheets (1)). Name = "FirstSheet"
Добавить лист в переменнуюDim ws как рабочий лист
Установить ws = Sheets.Add
Копировать рабочие листы
Переместить лист в конец книгиЛисты ("Sheet1"). Переместить после: = Sheets (Sheets.Count)
К новой книгеЛисты ("Лист1"). Копировать
Выбранные листы в новую книгуActiveWindow.SelectedSheets.Copy
Перед другим листомЛисты ("Лист1"). Копировать до: = Листы ("Лист2")
Перед первым листомЛисты ("Лист1"). Копировать до: = Листы (1)
После последнего листаЛисты ("Sheet1"). Копировать после: = Sheets (Sheets.Count)
Копия и имяЛисты ("Sheet1"). Копировать после: = Sheets (Sheets.Count)
ActiveSheet.Name = "LastSheet"
Копирование и имя из значения ячейкиЛисты ("Sheet1"). Копировать после: = Sheets (Sheets.Count)
ActiveSheet.Name = Диапазон ("A1"). Значение
К другой книгеТаблицы ("Sheet1"). Копировать перед: = Workbooks ("Example.xlsm"). Sheets (1)
Скрыть / показать листы
Скрыть листТаблицы ("Лист1"). Visible = False
или
Таблицы ("Лист1"). Visible = xlSheetHidden
Показать листТаблицы ("Лист1"). Visible = True
или
Таблицы ("Лист1"). Visible = xlSheetVisible
Очень Скрытый ЛистЛисты («Лист1»). Visible = xlSheetVeryHidden
Удалить или очистить таблицы
Удалить листТаблицы ("Лист1"). Удалить
Удалить лист (обработка ошибок)При ошибке Возобновить Далее
Таблицы ("Лист1"). Удалить
При ошибке GoTo 0
Удалить лист (без запроса)Application.DisplayAlerts = False
Таблицы ("Лист1"). Удалить
Application.DisplayAlerts = True
Чистый листТаблицы ("Sheet1"). Cells.Clear
Очистить только содержимое листаТаблицы ("Sheet1"). Cells.ClearContents
Очистить используемый листЛисты ("Лист1"). UsedRange.Clear
Защитить или снять защиту листов
Снять защиту (без пароля)Таблицы ("Лист1"). Снять защиту
Снять защиту (Пароль)Таблицы ("Sheet1"). Снять защиту "Пароль"
Защитить (без пароля)Листы ("Лист1"). Защитить
Защитить (пароль)Таблицы ("Sheet1"). Защитить "Пароль"
Защитить, но разрешить доступ VBAТаблицы ("Лист1"). Защитить UserInterfaceOnly: = True
Снять защиту со всех листовDim ws как рабочий лист
Для каждого ws в листах
ws.Unprotect "пароль"
Следующий ws
wave wave wave wave wave