VBA для каждого примера (краткий справочник)

В этом руководстве будут показаны примеры использования цикла For Each Loop в VBA. Щелкните здесь, чтобы узнать больше о петлях в целом.

Для каждой петли

For Each Loop позволяет вам пройти через каждый объект в коллекции:

  • Все ячейки в диапазоне
  • Все листы в книге
  • Все открытые книги
  • Все фигуры на листе
  • Все элементы в массиве
  • и более!

Для каждого: основные примеры

Эти примеры продемонстрируют, как настроить циклы For Each для циклического перебора различных типов объектов.

Цикл через клетки

Эта процедура будет проходить через каждую ячейку в диапазоне A1: A10, устанавливая ячейку справа, равную самой себе.

12345678 Sub ForEachCell ()Тусклая ячейка как диапазонДля каждой ячейки на листах («Лист1»). Диапазон («A1: A10»)Cell.Offset (0, 1) .value = Cell.valueСледующая ячейкаКонец подписки

Цикл через листы

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

12345678 Sub ForEachSheets ()Dim ws как рабочий листДля каждой страницы в листахws.Visible = TrueСледующий листКонец подписки

Цикл по книгам

Эта процедура будет проходить через каждую книгу, закрывая каждую.

12345678 Sub ForEachWorkbooks ()Dim wb As WorkbookДля каждого ББ в книгахwb.CloseСледующий wbКонец подписки

Цикл через фигуры

Эта процедура будет проходить через каждую фигуру в Sheet1, удаляя каждую из них.

12345678 Sub ForEachShape ()Дим Шп как формаДля каждой ширины в листах ("Sheet1"). ФигурыШп.УдалитьNext ShpКонец подписки

Прокрутка диаграмм

Эта процедура будет проходить по каждой диаграмме на листе Sheet1, удаляя каждую из них.

12345678 Sub ForEachCharts ()Dim cht As ChartObjectДля каждого cht в листах ("Sheet1"). ChartObjectscht.DeleteСледующий чтКонец подписки

Цикл по сводным таблицам

Эта процедура будет проходить через каждую сводную таблицу на листе Sheet1, очищая каждую из них.

12345678 Sub ForEachPivotTables ()Dim pvt как сводная таблицаДля каждого pvt в таблицах ("Sheet1"). Сводные таблицыpvt.ClearTableСледующий пвтКонец подписки

Цикл по таблицам

Эта процедура будет проходить через каждую таблицу в Sheet1, удаляя каждую из них.

12345678 Sub ForEachTables ()Dim tbl As ListObjectДля каждой таблицы в листах ("Sheet1"). ListObjectsтабл.УдалитьСледующая таблицаКонец подписки

Цикл по элементам в массиве

Эта процедура будет перебирать каждый элемент в массиве, отображать каждое значение в msgbox,

12345678910 Sub ForEachItemInArray ()Dim arrValue как вариантТусклый элемент как вариантarrValue = Array («Элемент 1», «Элемент 2», «Элемент 3»)Для каждого элемента в arrValueЭлемент MsgBoxСледующий пунктКонец подписки

Цикл по номерам

Эта процедура будет перебирать каждое число в массиве, отображать каждое значение в msgbox,

12345678910111213 Sub ForEachNumberInNumbers ()Dim arrNumber (от 1 до 3) как целое числоDim num As VariantarrNumber (1) = 10arrNumber (2) = 20arrNumber (3) = 30Для каждого числа в arrNumberMsgbox NumСледующее числоКонец подписки

Для каждого построителя цикла

Примеры в этой статье были построены с помощью Конструктор петель в нашем Надстройка VBA: AutoMacro.

В Конструктор петель позволяет очень легко сгенерировать код для циклического перебора объектов. AutoMacro также содержит много других Генераторы кода, обширный Библиотека кодаи мощный Инструменты кодирования.

Для каждого - Если

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

Для каждой ячейки в диапазоне - если

1234567891011121314 Sub If_Loop ()Тусклая ячейка как диапазонДля каждой ячейки в диапазоне («A2: A6»)Если Cell.Value> 0, тоCell.Offset (0, 1) .Value = "Положительный"ElseIf Cell.Value <0 ТогдаCell.Offset (0, 1) .Value = "Отрицательное"ЕщеCell.Offset (0, 1) .Value = "Ноль"Конец, еслиСледующая ячейкаКонец подписки

Для каждого общего примера

Закрыть все книги

Эта процедура закроет все открытые книги с сохранением изменений.

123456789 Sub CloseAllWorkbooks ()Dim wb As WorkbookДля каждого ББ в книгахwb.Close SaveChanges: = TrueСледующий wbКонец подписки

Скрыть все листы

Эта процедура скроет все рабочие листы.

12345678 Sub HideAllSheets ()Dim ws как рабочий листДля каждой страницы в листахws.Visible = xlSheetHiddenСледующий wsКонец подписки

Показать все листы

Эта процедура покажет все рабочие листы.

12345678 Sub UnhideAllSheets ()Dim ws как рабочий листДля каждой страницы в листахws.Visible = xlSheetVisibleСледующий wsКонец подписки

Защитить все листы

Эта процедура защитит все рабочие листы.

12345678 Sub ProtectAllSheets ()Dim ws как рабочий листДля каждой страницы в листахws.Protect Пароль: = "…"Следующий wsКонец подписки

Снять защиту со всех листов

Эта процедура снимет защиту со всех листов.

12345678 Sub UnprotectAllSheets ()Dim ws как рабочий листДля каждой страницы в листахws.Unprotect Пароль: = "…"Следующий wsКонец подписки

Удалить все фигуры на всех листах

Эта процедура удалит все фигуры в книге.

123456789101112 Sub DeleteAllShapesOnAllWorksheets ()Тусклый лист как рабочий листДим Шп как формаДля каждой страницы в листахДля каждого Shp в формах ws.Шп.УдалитьNext ShpСледующий wsКонец подписки

Обновить все сводные таблицы

Эта процедура обновит все сводные таблицы на листе.

12345678 Sub RefreshAllPivotTables ()Dim pvt как сводная таблицаДля каждого pvt в таблицах ("Sheet1"). Сводные таблицыpvt.RefreshTableСледующий пвтКонец подписки

Использование For Each в Access VBA

Цикл For Each работает в Access VBA так же, как и в Excel VBA. В следующем примере будут удалены все таблицы в текущей базе данных.

123456789 Sub RemoveAllTables ()Dim tdf как TableDefDim dbs как база данныхУстановите dbs = CurrentDbДля каждого tdf в dbs.TableDefsDoCmd.DeleteObject tdf.NameПетляУстановить dbs = NothingКонец подписки

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave