Този урок ще ви покаже примери за използване на For Every Loop във VBA. Щракнете тук, за да научите повече за контурите като цяло.
За всеки цикъл
За всеки цикъл ви позволява да преминете през цикъл всеки обект в колекция:
- Всички клетки в диапазон
- Всички работни листове в работна книга
- Всички отворени работни книги
- Всички форми в работен лист
- Всички елементи в масив
- и още!
За всеки: Основни примери
Тези примери ще демонстрират как да настроите за всеки цикъл да циклично преминава през различни типове обекти.
Цикъл през клетки
Тази процедура ще премине през всяка клетка в обхват A1: A10, като настрои клетката на нейната права, равна на себе си.
12345678 | Sub ForEachCell ()Dim Cell As RangeЗа всяка клетка в листове ("Sheet1"). Диапазон ("A1: A10")Cell.Offset (0, 1) .value = Cell.valueСледваща клеткаEnd Sub |
Циклични листове
Тази процедура ще премине през всеки лист в работна книга, разкривайки всеки лист.
12345678 | Sub ForEachSheets ()Затъмнете като работен листЗа всеки ws в таблициws.Visible = ВярноСледващ листEnd Sub |
Превъртане през работни книги
Тази процедура ще премине през всяка работна книга и ще затвори всяка.
12345678 | Sub ForEachWorkbooks ()Dim wb Като работна книгаЗа всяка wb в работни книгиwb.ЗатвориСледваща wbEnd Sub |
Циклични форми
Тази процедура ще премине през всяка форма в Sheet1, като ще изтрие всяка.
12345678 | Sub ForEachShape ()Dim Shp като формаЗа всеки Shp In Sheets ("Sheet1"). ФормиShp.DeleteСледващ ШпEnd Sub |
Циклични диаграми
Тази процедура ще премине през всяка диаграма в Sheet1, като ще изтрие всяка.
12345678 | Sub ForEachCharts ()Dim cht As ChartObjectЗа всеки cht In Sheets ("Sheet1"). ChartObjectscht.DeleteСледващ chtEnd Sub |
Превъртане през обобщени таблици
Тази процедура ще премине през всяка обобщена таблица в Sheet1, изчиствайки всяка една
12345678 | Sub ForEachPivotTables ()Затъмнете pvt като обобщена таблицаЗа всеки pvt в таблици ("Sheet1"). Обобщени таблициpvt.ClearTableСледващ pvtEnd Sub |
Циклични таблици
Тази процедура ще премине през всяка таблица в Sheet1, като ще изтрие всяка.
12345678 | Sub ForEachTables ()Dim tbl като ListObjectЗа всеки tbl In Sheets ("Sheet1"). ListObjectstbl.DeleteСледващата tblEnd Sub |
Циклични елементи в масив
Тази процедура ще премине през всеки елемент в масив, ще покаже всяка стойност в съобщение,
12345678910 | Sub ForEachItemInArray ()Dim arrValue като вариантЗатъмняване на елемент като вариантarrValue = Array ("Елемент 1", "Позиция 2", "Позиция 3")За всеки елемент в arrValueMsgBox елементСледващ елементEnd Sub |
Циклични числа
Тази процедура ще премине през всяко число в масив, ще покаже всяка стойност в съобщение,
12345678910111213 | Sub ForEachNumberInNumbers ()Dim arrNumber (1 To 3) As IntegerDim num като вариантarrNumber (1) = 10arrNumber (2) = 20arrNumber (3) = 30За всеки номер In arrNumberMsgbox NumСледващ брEnd Sub |
За всеки конструктор на контури
Примерите в тази статия са създадени с Loop Builder в нашата Добавка VBA: AutoMacro.
The Loop Builder улеснява генерирането на код за циклично преминаване на обекти. AutoMacro съдържа и много други Генератори на кодове, обширен Библиотека с кодове, и мощен Инструменти за кодиране.
За всеки - Ако
Можете също да използвате If Statements в рамките на Loops, за да проверите дали обектите отговарят на определени критерии, като извършвате само действия върху тези обекти, които отговарят на критериите. Ето пример за циклично преминаване през всяка клетка в диапазон:
За всяка клетка в обхвата - Ако
1234567891011121314 | Sub If_Loop ()Dim Cell като диапазонЗа всяка клетка в обхвата ("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.Close SaveChanges: = ИстинаСледваща wbEnd 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.ShapesShp.DeleteСледващ ШпСледващата wsEnd Sub |
Обновете всички обобщени таблици
Тази процедура ще опресни всички обобщени таблици на лист.
12345678 | Sub RefreshAllPivotTables ()Затъмнете pvt като обобщена таблицаЗа всеки pvt в листове ("Sheet1"). Обобщени таблициpvt.RefreshTableСледващ pvtEnd Sub |
Използване За всеки в Access VBA
Цикълът For For работи по същия начин в Access VBA, както в Excel VBA. Следващият пример ще премахне всички таблици в текущата база данни.
123456789 | Sub RemoveAllTables ()Dim tdf As TableDefDim dbs като база данниЗадайте dbs = CurrentDbЗа всеки tdf в dbs.TableDefsDoCmd.DeleteObject tdf.NameЦикълЗадайте dbs = НищоEnd Sub |