Цей підручник покаже вам приклади використання циклу For Every Loop у VBA. Натисніть тут, щоб дізнатися більше про цикли загалом.
Для кожної петлі
Цикл "Для кожного" дозволяє виконувати цикл кожен об'єкт у колекції:
- Усі клітини в діапазоні
- Усі аркуші в робочому зошиті
- Усі відкриті трудові книжки
- Усі фігури на аркуші
- Усі елементи в масиві
- і більше!
Для кожного: основні приклади
Ці приклади продемонструють, як налаштувати цикли For Each для циклу через різні типи об’єктів.
Цикл через клітини
Ця процедура прокручуватиме кожну клітинку в діапазоні A1: A10, встановлюючи для неї осередок рівним самому собі.
12345678 | Sub ForEachCell ()Dim Cell As RangeДля кожної клітинки в аркушах ("аркуш1"). Діапазон ("A1: A10")Ячейка.Зміщення (0, 1). Значення = Ячейка.значенняНаступна клітинаEnd Sub |
Цикличні аркуші
Ця процедура прокручуватиме кожен аркуш у робочій книзі, відкриваючи кожен аркуш.
12345678 | Sub ForEachSheets ()Затемнити як робочий аркушДля кожного ws у аркушахws.Visible = ПравдаНаступний аркушEnd Sub |
Цикличні робочі зошити
Ця процедура буде повторювати кожну книгу, закриваючи кожну.
12345678 | Sub ForEachWorkbooks ()Dim wb Як робочий зошитДля кожного wb у робочих зошитахwb.ЗакритиНаступна вбEnd Sub |
Цикличні форми
Ця процедура прокрутить кожну фігуру в Sheet1, видаливши кожну з них.
12345678 | Sub ForEachShape ()Dim Shp у форміДля кожної ШП у аркушах ("Лист1"). ФігуриШП.ВидалитиДалі ШпEnd Sub |
Цикличні діаграми
Ця процедура прокручуватиме кожну діаграму у Sheet1, видаляючи кожну.
12345678 | Sub ForEachCharts ()Затемнити як ChartObjectДля кожного cht In Sheets ("Sheet1"). ChartObjectscht.DeleteНаступний чтEnd Sub |
Цикл зведених таблиць
Ця процедура прокручуватиме кожну зведену таблицю у Sheet1, очищаючи кожну з них
12345678 | Sub ForEachPivotTables ()Затемнити pvt як зведену таблицюДля кожного pvt у аркушах ("аркуш1"). Зведені таблиціpvt.ClearTableНаступний pvtEnd Sub |
Цикличні таблиці
Ця процедура прокручуватиме кожну таблицю у Sheet1, видаляючи кожну.
12345678 | Sub ForEachTables ()Dim tbl як ListObjectДля кожного tbl In Sheets ("Sheet1"). ListObjectstbl.ВидалитиДалі таблEnd Sub |
Циклічні елементи в масиві
Ця процедура прокручуватиме кожен елемент у масиві, відображатиме кожне значення в полі повідомлень,
12345678910 | Sub ForEachItemInArray ()Dim arrValue As VariantЗатемнити елемент як варіантarrValue = Масив ("Пункт 1", "Пункт 2", "Пункт 3")Для кожного елемента в arrValueПункт MsgBoxНаступний пунктEnd Sub |
Цикличні числа
Ця процедура прокручуватиме кожне число в масиві, відображатиме кожне значення в полі повідомлень,
12345678910111213 | Sub ForEachNumberInNumbers ()Dim arrNumber (1 To 3) As IntegerDim num як варіантarrNumber (1) = 10arrNumber (2) = 20arrNumber (3) = 30Для кожного числа У arrNumberНомер поштової скринькиНаступний номерEnd Sub |
Для кожного конструктора циклів
Приклади в цій статті були побудовані за допомогою Конструктор циклів в нашому Надбудова VBA: AutoMacro.
The Конструктор циклів дозволяє дуже легко генерувати код для обходу об'єктів. 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 = "Нуль"Закінчити ЯкщоНаступна клітинаEnd Sub |
Для кожного загального прикладу
Закрийте всі книги
Ця процедура закриє всі відкриті книги, зберігаючи зміни.
123456789 | Sub CloseAllWorkbooks ()Dim wb Як робочий зошитДля кожного wb у робочих зошитахwb.Закрити SaveChanges: = ПравдаНаступна вбEnd Sub |
Сховати всі аркуші
Ця процедура приховає всі аркуші.
12345678 | Sub HideAllSheets ()Затемнити як робочий аркушДля кожного ws у аркушахws.Visible = xlSheetHiddenНаступний wsEnd Sub |
Показати всі аркуші
Ця процедура покаже всі робочі аркуші.
12345678 | Sub UnhideAllSheets ()Затемнити як робочий аркушДля кожного ws у аркушахws.Visible = xlSheetVisibleНаступний wsEnd Sub |
Захистіть усі аркуші
Ця процедура захистить усі робочі листи.
12345678 | Sub ProtectAllSheets ()Затемнити як робочий аркушДля кожного ws у аркушахws.Protect Password: = "…"Наступний wsEnd Sub |
Зняти захист з усіх аркушів
Ця процедура зніме захист з усіх аркушів.
12345678 | Sub UnprotectAllSheets ()Затемнити як робочий аркушДля кожного ws у аркушахws.Unprotect Password: = "…"Наступний wsEnd Sub |
Видалити всі форми на всіх аркушах
Ця процедура видалить усі фігури в книзі.
123456789101112 | Sub DeleteAllShapesOnAllWorksheets ()Затемнений аркуш як робочий аркушDim Shp у форміДля кожного ws у аркушахДля кожного Shp У ws.ShapesШП.ВидалитиДалі ШпНаступний wsEnd Sub |
Оновіть усі зведені таблиці
Ця процедура оновить усі зведені таблиці на аркуші.
12345678 | Sub RefreshAllPivotTables ()Затемнити pvt як зведену таблицюДля кожного pvt у аркушах ("аркуш1"). Зведені таблиціpvt.RefreshTableНаступний pvtEnd Sub |
Використання для кожного в Access VBA
Цикл "Для кожного" працює так само в Access VBA, як і в Excel VBA. Наступний приклад видалить усі таблиці в поточній базі даних.
123456789 | Sub RemoveAllTables ()Dim tdf як TableDefDim dbs як база данихВстановити dbs = CurrentDbДля кожного tdf у dbs.TableDefsDoCmd.DeleteObject tdf.NameПетляВстановити dbs = нічогоEnd Sub |