Низи во Visual Basic за апликација

Низите во Visual Basic за апликација се структури кои обично складираат множества поврзани променливи од ист тип. До записите во низата се пристапува преку нивниот нумерички индекс.

На пример, постои тим од 20 луѓе чии имиња треба да се зачуваат за подоцнежна употреба во VBA кодот. Едноставно може да се прогласат 20 променливи за секое име, вака:

Dim Team_Member1 As String Dim Team_Member2 As String ... Dim Team_Member20 As String

Но, можете да користите многу поедноставен и поорганизиран начин - складирајте список со имиња на членови на тимот во низа од 20 променливи како Стринг:

Dim Team_Members (1 до 20) Како стринг

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

Team_Members(1) = "Џон Смит"

Дополнителна предност на складирањето податоци во низа, во споредба со користењето на посебни променливи, станува очигледна кога ќе стане неопходно да се изврши истото дејство на секој елемент од низата. Ако имињата на членовите на тимот се зачувани во 20 посебни променливи, тогаш ќе бидат потребни 20 линии код да се напишат секој пат за да се изврши истото дејство на секоја од нив. Меѓутоа, ако имињата се зачувани во низа, тогаш можете да го извршите саканото дејство со секое од нив користејќи едноставна јамка.

Како функционира е прикажано подолу со пример за код кој ги печати имињата на секој член на тимот последователно во ќелиите на колоната. A активен работен лист на Excel.

За i = 1 до 20 ќелии (i, 1).Вредност = Тим_Членови(i) Следно i

Очигледно, работата со низа што складира 20 имиња е многу помалку незгодна и попрецизна од користењето на 20 посебни променливи. Но, што ако овие имиња не се 20, туку 1000? А ако дополнително се бара презимињата и патронимите да се чуваат посебно?! Јасно е дека наскоро ќе стане целосно невозможно да се ракува со таков обем на податоци во VBA код без помош на низа.

Повеќедимензионални низи во Excel Visual Basic

Низите на Visual Basic дискутирани погоре се сметаат за еднодимензионални. Ова значи дека тие чуваат едноставна листа на имиња. Сепак, низите можат да имаат повеќе димензии. На пример, дводимензионална низа може да се спореди со мрежа од вредности.

Да речеме дека сакате да ги зачувате дневните бројки за продажба за јануари за 5 различни тимови. За ова ќе биде потребна дводимензионална низа која се состои од 5 групи на метрика за 31 ден. Ајде да декларираме низа како оваа:

Dim Jan_Sales_Figures(1 до 31, 1 до 5) како валута

За пристап до елементите на низата Jan_Sales_Figures, треба да користите два индекса што го означуваат денот на месецот и бројот на командата. На пример, адресата на елементот што содржи бројки за продажба за 2-ох тимови за 15-ти Јануари би бил напишан вака:

Jan_Sales_Figures(15, 2)

На ист начин, можете да декларирате низа со 3 или повеќе димензии - само додадете дополнителни димензии на декларацијата на низата и користете дополнителни индекси за да се повикате на елементите на оваа низа.

Декларирање низи во Excel Visual Basic

Претходно во оваа статија, веќе разгледавме неколку примери за декларирање низи во VBA, но оваа тема заслужува подетално разгледување. Како што е прикажано, еднодимензионалната низа може да се декларира вака:

Dim Team_Members (1 до 20) Како стринг

Таквата декларација му кажува на VBA компајлерот дека низата Членови на тимот се состои од 20 променливи до кои може да се пристапи со индекси од 1 до 20. Сепак, би можеле да помислиме да ги нумерираме нашите променливи низи од 0 до 19, во кој случај низата треба да се декларира вака:

Dim Team_Members (0 до 19) Како стринг

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

Dim Team_Members(19) Како стринг

Компајлерот VBA ќе го третира таков запис како декларирање низа од 20 елементи со индекси од 0 до 19.

Истите правила важат при декларирање на повеќедимензионални низи на Visual Basic. Како што е веќе прикажано во еден од примерите, при декларирање на дводимензионална низа, индексите на нејзините димензии се одделени со запирка:

Dim Jan_Sales_Figures(1 до 31, 1 до 5) како валута

Меѓутоа, ако не наведете почетен индекс за двете димензии на низата и наведете го вака:

Dim Jan_Sales_Figures(31, 5) Како валута

тогаш овој запис ќе се третира како дводимензионална низа, чија прва димензија содржи 32 елементи со индекси од 0 до 31, а втората димензија на низата содржи 6 елементи со индекси од 0 до 5.

Динамички низи

Сите низи во горните примери имаат фиксен број на димензии. Меѓутоа, во многу случаи не знаеме однапред каква големина треба да биде нашата низа. Можеме да излеземе од ситуацијата со прогласување огромна низа, чија големина сигурно ќе биде поголема отколку што е потребно за нашата задача. Но, таквото решение ќе бара многу дополнителна меморија и може да ја забави програмата. Има подобро решение. Можеме да користиме динамична низа - ова е низа чија големина може да се постави и менува кој било број пати за време на извршувањето на макро.

Динамична низа се декларира со празни загради, вака:

Dim Team_Members() Како стринг

Следно, ќе треба да ја декларирате димензијата на низата за време на извршувањето на кодот користејќи го изразот ReDim:

ReDim Team_Members (1 до 20)

И ако за време на извршувањето на кодот треба повторно да ја промените големината на низата, тогаш можете повторно да го користите изразот ReDim:

Ако Team_Size > 20 then ReDim Team_Members(1 To Team_Size) Крај ако

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

Ако Team_Size > 20 then ReDim Reserve Team_Members(1 до Team_Size) Крај ако

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

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