Safu katika Visual Basic kwa ajili ya Maombi

Mkusanyiko katika Visual Basic for Application ni miundo ambayo kwa kawaida huhifadhi seti za vigeu vinavyohusiana vya aina moja. Maingizo ya safu hupatikana kwa faharasa yao ya nambari.

Kwa mfano, kuna timu ya watu 20 ambao majina yao yanahitaji kuhifadhiwa kwa matumizi ya baadaye katika msimbo wa VBA. Mtu anaweza kutangaza vijiti 20 vya kushikilia kila jina, kama hivyo:

Dim Team_Member1 Kama String Dim Team_Member2 Kama Kamba ... Dim Team_Member20 As String

Lakini unaweza kutumia njia rahisi zaidi na iliyopangwa zaidi - kuhifadhi orodha ya majina ya washiriki wa timu katika safu 20 za anuwai kama vile. Kamba:

Dim Team_Members(1 Hadi 20) Kama Mfuatano

Katika mstari ulioonyeshwa hapo juu, tumetangaza safu. Sasa hebu tuandike thamani kwa kila moja ya vipengele vyake, kama hii:

Team_Members(1) = "John Smith"

Faida ya ziada ya kuhifadhi data katika safu, ikilinganishwa na kutumia vigezo tofauti, inaonekana wazi inapohitajika kufanya kitendo sawa kwenye kila kipengele cha safu. Ikiwa majina ya washiriki wa timu yangehifadhiwa katika vigeu 20 tofauti, basi ingechukua mistari 20 ya msimbo kuandika kila wakati ili kufanya kitendo sawa kwa kila mmoja wao. Walakini, ikiwa majina yamehifadhiwa kwa safu, basi unaweza kufanya kitendo unachotaka na kila mmoja wao kwa kutumia kitanzi rahisi.

Jinsi inavyofanya kazi huonyeshwa hapa chini kwa mfano wa msimbo unaochapisha majina ya kila mshiriki wa timu kwa kufuatana katika visanduku vya safu wima. A laha kazi ya Excel inayotumika.

Kwa i = Seli 1 hadi 20(i,1).Thamani = Wanachama_wa Timu(i) Inayofuata i

Ni wazi, kufanya kazi na safu ambayo huhifadhi majina 20 sio ngumu sana na ni sahihi zaidi kuliko kutumia anuwai 20 tofauti. Lakini vipi ikiwa majina haya sio 20, lakini 1000? Na ikiwa, kwa kuongeza, inahitajika kuweka majina na patronymics kando?! Ni wazi kwamba hivi karibuni itakuwa vigumu kabisa kushughulikia kiasi hicho cha data katika msimbo wa VBA bila msaada wa safu.

Mipangilio ya multidimensional katika Excel Visual Basic

Safu za Visual Basic zilizojadiliwa hapo juu zinachukuliwa kuwa za mwelekeo mmoja. Hii ina maana kwamba wanahifadhi orodha rahisi ya majina. Walakini, safu zinaweza kuwa na vipimo vingi. Kwa mfano, safu ya pande mbili inaweza kulinganishwa na gridi ya maadili.

Tuseme unataka kuokoa takwimu za mauzo za kila siku za Januari kwa timu 5 tofauti. Hii itahitaji mkusanyiko wa pande mbili unaojumuisha seti 5 za vipimo kwa siku 31. Wacha tutangaze safu kama hii:

Dim Jan_Sales_Figures(1 Hadi 31, 1 Hadi 5) Kama Sarafu

Ili kufikia vipengele vya safu Jan_Sales_Figures, unahitaji kutumia fahirisi mbili zinazoonyesha siku ya mwezi na nambari ya amri. Kwa mfano, anwani ya kipengele kilicho na takwimu za mauzo 2-oh timu za Tarehe 15 Januari ingeandikwa hivi:

Jan_Mauzo_Takwimu(15, 2)

Kwa njia hiyo hiyo, unaweza kutangaza safu yenye vipimo 3 au zaidi - ongeza tu vipimo vya ziada kwenye tamko la safu na utumie fahirisi za ziada kurejelea vipengele vya safu hii.

Kutangaza Arrays katika Excel Visual Basic

Mapema katika makala hii, tayari tumeangalia mifano kadhaa ya kutangaza safu katika VBA, lakini mada hii inastahili kuangalia kwa karibu. Kama inavyoonyeshwa, safu ya sura moja inaweza kutangazwa kama hii:

Dim Team_Members(1 Hadi 20) Kama Mfuatano

Tamko kama hilo linamwambia mkusanyaji wa VBA kwamba safu Wanachama_wa Timu lina viambajengo 20 vinavyoweza kufikiwa katika fahirisi kutoka 1 hadi 20. Hata hivyo, tunaweza kufikiria kuorodhesha viambatisho vya safu yetu kutoka 0 hadi 19, ambapo safu inapaswa kutangazwa hivi:

Dim Team_Members(0 Hadi 19) Kama Mfuatano

Kwa kweli, kwa chaguo-msingi, hesabu za vitu vya safu huanza kutoka 0, na katika tamko la safu, faharisi ya awali inaweza isiainishwe kabisa, kama hii:

Dim Team_Members(19) Kama Kamba

Mkusanyaji wa VBA atashughulikia ingizo kama kutangaza safu ya vitu 20 na fahirisi kutoka 0 hadi 19.

Sheria sawa hutumika wakati wa kutangaza safu nyingi za Visual Basic. Kama inavyoonyeshwa tayari katika moja ya mifano, wakati wa kutangaza safu ya pande mbili, fahirisi za vipimo vyake hutenganishwa na koma:

Dim Jan_Sales_Figures(1 Hadi 31, 1 Hadi 5) Kama Sarafu

Walakini, ikiwa hutataja faharisi ya kuanzia kwa vipimo vyote viwili vya safu na uitangaze kama hii:

Dim Jan_Sales_Figures(31, 5) Kama Sarafu

basi ingizo hili litachukuliwa kama safu ya pande mbili, kipimo cha kwanza ambacho kina vitu 32 na fahirisi kutoka 0 hadi 31, na mwelekeo wa pili wa safu una vitu 6 vilivyo na fahirisi kutoka 0 hadi 5.

Safu za nguvu

Safu zote katika mifano hapo juu zina idadi maalum ya vipimo. Hata hivyo, katika hali nyingi hatujui mapema ukubwa wa safu yetu inapaswa kuwa. Tunaweza kutoka nje ya hali hiyo kwa kutangaza safu kubwa, ambayo ukubwa wake hakika itakuwa kubwa kuliko muhimu kwa kazi yetu. Lakini suluhisho kama hilo litahitaji kumbukumbu nyingi za ziada na linaweza kupunguza kasi ya programu. Kuna suluhisho bora zaidi. Tunaweza kutumia safu inayobadilika - hii ni safu ambayo saizi yake inaweza kuwekwa na kubadilishwa idadi yoyote ya nyakati wakati wa utekelezaji wa macro.

Safu inayobadilika inatangazwa na mabano tupu, kama hii:

Dim Team_Members() Kama Kamba

Ifuatayo, utahitaji kutangaza ukubwa wa safu wakati wa utekelezaji wa nambari kwa kutumia usemi ReDim:

Wanachama_wa Timu ya ReDim(1 Hadi 20)

Na ikiwa wakati wa utekelezaji wa nambari unahitaji kubadilisha saizi ya safu tena, basi unaweza kutumia usemi wa ReDim tena:

Ikiwa Team_Size > 20 Kisha ReDim Team_Members(1 Hadi Team_Size) Maliza Ikiwa

Kumbuka kwamba kubadilisha ukubwa wa safu inayobadilika kwa njia hii itasababisha upotezaji wa maadili yote yaliyohifadhiwa kwenye safu. Ili kuhifadhi data tayari katika safu, unahitaji kutumia neno kuu Hifadhikama inavyoonekana hapa chini:

Ikiwa Team_Size > 20 Basi ReDim Preserve Team_Members(1 Hadi Team_Size) Maliza Ikiwa

Kwa bahati mbaya neno kuu Hifadhi inaweza tu kutumika kubadilisha mpaka wa juu wa mwelekeo wa safu. Upeo wa chini wa safu hauwezi kubadilishwa kwa njia hii. Pia, ikiwa safu ina vipimo vingi, basi kwa kutumia neno kuu Hifadhi, ni kipimo cha mwisho pekee cha safu kinaweza kubadilishwa ukubwa.

Acha Reply