Јамки во VBA

Постојат ситуации кога од програмата VBA се бара да го изврши истиот сет на дејства неколку пати по ред (односно, да го повтори истиот блок код неколку пати). Ова може да се направи со користење на VBA јамки.

VBA јамките вклучуваат:

Следно, ќе го разгледаме подетално секој од овие циклуси.

За оператор на јамка во Visual Basic

Структурата на операторот на јамката на во Visual Basic може да се организира во една од двете форми: како јамка За… Следно или како јамка За секој.

Циклус „За… Следно“

циклус За… Следно користи променлива која секвенцијално зема вредности од даден опсег. Со секоја промена на вредноста на променливата се вршат дејствата затворени во телото на циклусот. Ова е лесно да се разбере од едноставен пример:

За i = 1 до 10 Вкупно = Вкупно + iArray(i) Следно i

Во оваа едноставна јамка За… Следно се користи променлива i, кој последователно ги зема вредностите 1, 2, 3, ... 10 и за секоја од овие вредности се извршува VBA кодот во јамката. Така, оваа јамка ги сумира елементите на низата. iArray во променлива Вкупно.

Во горниот пример, зголемувањето на јамката не е одредено, така што да се зголеми променливата i од 1 до 10, стандардното е зголемување 1… Меѓутоа, во некои случаи е неопходно да се користат различни вредности за зголемување за јамката. Ова може да се направи со помош на клучниот збор Чекоркако што е прикажано во следниот едноставен пример.

За d = 0 до 10 Чекор 0.1 dВкупно = dВкупно + d Следно d

Бидејќи во горниот пример, чекорот за зголемување е поставен еднаков на 0.1, потоа променливата dВкупно за секое повторување на циклусот ги зема вредностите 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

За да го одредите чекорот на јамката во VBA, можете да користите негативна вредност, на пример, вака:

За i = 10 До 1 Чекор -1 iArray(i) = i Следна i

Еве го прирастот -1, па променливата i со секое повторување на циклусот ги добива вредностите 10, 9, 8, ... 1.

Јамка „За секој“

циклус За секој слично на циклус За… Следно, но наместо да се повторува низ низата вредности за променливата бројач, јамката За секој врши збир на дејства за секој објект во наведената група на објекти. Во следниот пример, користејќи јамка За секој ги набројува сите листови во тековната работна книга на Excel:

Затемни wsheet како работен лист за секој wsheet во работни листови MsgBox "Најден лист: " & wSheet.Name Следен wSheet

Изјава за прекин на јамката „Излези за“

Оператор Излезете за се користи за прекинување на циклусот. Штом оваа изјава ќе се сретне во кодот, програмата го завршува извршувањето на циклусот и продолжува со извршувањето на изјавите кои се во кодот веднаш по оваа јамка. Ова може да се користи, на пример, за пребарување на одредена вредност во низа. За да го направите ова, користејќи јамка, секој елемент од низата се скенира. Штом се најде потребниот елемент, нема потреба да се разгледува остатокот - циклусот се прекинува.

Апликација за оператор Излезете за прикажан во следниот пример. Овде циклусот повторува над 100 записи во низата и го споредува секој со вредноста на променливата dVal... Ако се најде совпаѓање, тогаш јамката се прекинува:

За i = 1 до 100 Ако dValues(i) = dVal Потоа IndexVal = i Излезете за крај ако следно i

Јамката Do while во Visual Basic

циклус Прави додека извршува блок од код се додека наведениот услов е исполнет. Следното е пример за постапка под, во која со користење на јамката Прави додека Броевите на Фибоначи кои не надминуваат 1000 се прикажуваат последователно:

„Под процедурата дава фибоначи броеви кои не надминуваат 1000 Sub Fibonacci() Dim i As Integer „бројач за да ја означи позицијата на елементот во низата Dim iFib As Integer „ја складира моменталната вредност на низата Dim iFib_Next Како Цел број „ја складира следната вредност од секвенцата Dim iStep As Integer 'зачувува големината на следниот прираст' иницијализирајте ги променливите i и iFib_Next i = 1 iFib_Next = 0 'Do while циклусот ќе се извршува додека вредноста на 'тековниот број на Фибоначи не биде поголема од 1000 Дали додека iFib_Next < 1000 Ако i = 1 Потоа 'специјален случај за првиот елемент iStep = 1 iFib = 0 Друго 'зачувајте ја големината на следниот прираст пред да ја презапишете 'тековната вредност на низата iStep = iFib iFib = iFib_Next End Ако 'отпечатете го тековниот број на Фибоначи во колоната А од активниот работен лист 'во редот со индекс i Cells(i , 1).Value = iFib 'пресметајте го следниот број Фибоначи и зголемете го индексот на позицијата на елементот за 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

Во дадениот пример, условот iFib_Next < 1000 проверено на почетокот на циклусот. Затоа, ако првата вредност iFib_Next Ако има повеќе од 1000, тогаш јамката никогаш нема да се изврши.

Друг начин за спроведување на јамка Прави додека - поставете ја состојбата не на почетокот, туку на крајот на јамката. Во овој случај, јамката ќе се изврши барем еднаш, без оглед на тоа дали условот е исполнет.

Шематски, таков циклус Прави додека со услов да се провери на крајот ќе изгледа вака:

Направете ... Јамка додека iFib_Next < 1000

Цикл „Направи до“ во Visual Basic

циклус Дали до многу слично на циклусот Прави додека: блокот код во телото на циклусот се извршува одново и одново додека не се исполни наведениот услов (резултатот од условниот израз е Точно). Во следната постапка под користејќи циклус Дали до преземете вредности од сите ќелии во колона A работен лист додека колоната не наиде на празна ќелија:

iRow = 1 Дали до IsEmpty(Cells(iRow, 1)) 'Вредноста на тековната ќелија е зачувана во низата dCellValues ​​· dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

Во примерот погоре, состојбата IsEmpty (Ќелии (iRow, 1)) се наоѓа на почетокот на структурата Дали до, така што јамката ќе се изврши барем еднаш ако првата преземена ќелија не е празна.

Сепак, како што е прикажано во примерите на јамката Прави додека, во некои ситуации потребно е јамката да се изврши барем еднаш, без оглед на почетниот резултат на условниот израз. Во овој случај, условниот израз треба да се стави на крајот на јамката, вака:

Направете ... Јамка додека не е празно (Ќелии (iRow, 1))

Оставете Одговор