Skikkings in Visual Basic vir toepassing

Skikkings in Visual Basic for Application is strukture wat tipies stelle verwante veranderlikes van dieselfde tipe stoor. Skikkinginskrywings word verkry deur hul numeriese indeks.

Daar is byvoorbeeld 'n span van 20 mense wie se name gestoor moet word vir latere gebruik in VBA-kode. Mens kan eenvoudig 20 veranderlikes verklaar om elke naam te hou, soos so:

Dim Team_Lid1 As String Dim Team_Lid2 As String ... Dim Team_Lid20 As String

Maar jy kan 'n baie eenvoudiger en meer georganiseerde manier gebruik - stoor 'n lys van spanlede name in 'n verskeidenheid van 20 veranderlikes soos string:

Dim Team_Members (1 tot 20) as string

In die lyn hierbo getoon, het ons 'n skikking verklaar. Kom ons skryf nou 'n waarde vir elkeen van sy elemente, soos volg:

Team_Members(1) = "John Smith"

'n Bykomende voordeel van die stoor van data in 'n skikking, in vergelyking met die gebruik van afsonderlike veranderlikes, word duidelik wanneer dit nodig word om dieselfde aksie op elke element van die skikking uit te voer. As die name van die spanlede in 20 afsonderlike veranderlikes gestoor is, sal dit elke keer 20 reëls kode neem om elke keer te skryf om dieselfde aksie op elkeen van hulle uit te voer. As die name egter in 'n skikking gestoor word, kan u die verlangde aksie met elkeen van hulle uitvoer deur 'n eenvoudige lus te gebruik.

Hoe dit werk word hieronder gedemonstreer met 'n kodevoorbeeld wat die name van elke spanlid opeenvolgend in die kolomselle druk. A aktiewe Excel-werkblad.

Vir i = 1 tot 20 selle(i,1).Waarde = Spanlede(i) Volgende i

Dit is duidelik dat werk met 'n skikking wat 20 name stoor baie minder omslagtig en meer akkuraat is as om 20 afsonderlike veranderlikes te gebruik. Maar wat as hierdie name nie 20 is nie, maar 1000? En as daar boonop vereis word om die vanne en patronieme apart te hou?! Dit is duidelik dat dit binnekort heeltemal onmoontlik sal word om so 'n volume data in VBA-kode te hanteer sonder die hulp van 'n skikking.

Multidimensionele skikkings in Excel Visual Basic

Die Visual Basic-skikkings wat hierbo bespreek is, word as eendimensioneel beskou. Dit beteken dat hulle 'n eenvoudige lys name stoor. Skikkings kan egter veelvuldige dimensies hê. Byvoorbeeld, 'n tweedimensionele skikking kan vergelyk word met 'n rooster van waardes.

Kom ons sê jy wil die daaglikse verkoopsyfers vir Januarie vir 5 verskillende spanne stoor. Dit sal 'n tweedimensionele skikking vereis wat bestaan ​​uit 5 stelle metrieke vir 31 dae. Kom ons verklaar 'n skikking soos hierdie:

Dim Jan_Verkope_Figures(1 tot 31, 1 tot 5) as geldeenheid

Om toegang tot skikkingselemente te verkry Jan_Verkoopsyfers, moet jy twee indekse gebruik wat die dag van die maand en die opdragnommer aandui. Byvoorbeeld, die adres van 'n element wat verkoopsyfers bevat vir 2-o spanne vir 15 ste Januarie sou soos volg geskryf word:

Jan_Verkoopsyfers(15, 2)

Op dieselfde manier kan jy 'n skikking met 3 of meer dimensies verklaar - voeg net bykomende dimensies by die skikkingsverklaring en gebruik addisionele indekse om na die elemente van hierdie skikking te verwys.

Verklaar skikkings in Excel Visual Basic

Ons het vroeër in hierdie artikel reeds na verskeie voorbeelde gekyk van die verklaring van skikkings in VBA, maar hierdie onderwerp verdien 'n nader kyk. Soos getoon, kan 'n eendimensionele skikking soos volg verklaar word:

Dim Team_Members (1 tot 20) as string

So 'n verklaring vertel die VBA samesteller dat die skikking Spanlede bestaan ​​uit 20 veranderlikes wat by indekse van 1 tot 20 verkry kan word. Ons kan egter daaraan dink om ons skikkingsveranderlikes van 0 tot 19 te nommer, in welke geval die skikking so verklaar moet word:

Dim Team_Members (0 tot 19) as string

Trouens, die nommering van skikkingselemente begin by verstek vanaf 0, en in die skikkingverklaring kan die aanvanklike indeks glad nie gespesifiseer word nie, soos volg:

Dim Team_Members(19) As String

Die VBA-samesteller sal so 'n inskrywing hanteer as om 'n skikking van 20 elemente met indekse van 0 tot 19 te verklaar.

Dieselfde reëls geld wanneer multidimensionele Visual Basic-skikkings verklaar word. Soos reeds getoon in een van die voorbeelde, wanneer 'n tweedimensionele skikking verklaar word, word die indekse van sy dimensies geskei deur 'n komma:

Dim Jan_Verkope_Figures(1 tot 31, 1 tot 5) as geldeenheid

As jy egter nie 'n beginindeks vir beide dimensies van die skikking spesifiseer nie en dit so verklaar:

Dim Jan_Sales_Figures(31, 5) As Geldeenheid

dan sal hierdie inskrywing as 'n tweedimensionele skikking behandel word, waarvan die eerste dimensie 32 elemente bevat met indekse van 0 tot 31, en die tweede dimensie van die skikking bevat 6 elemente met indekse van 0 tot 5.

Dinamiese skikkings

Alle skikkings in die bogenoemde voorbeelde het 'n vaste aantal afmetings. In baie gevalle weet ons egter nie vooraf watter grootte ons skikking moet wees nie. Ons kan uit die situasie kom deur 'n groot verskeidenheid te verklaar, waarvan die grootte beslis groter sal wees as wat nodig is vir ons taak. Maar so 'n oplossing sal baie ekstra geheue verg en kan die program vertraag. Daar is 'n beter oplossing. Ons kan 'n dinamiese skikking gebruik - dit is 'n skikking waarvan die grootte enige aantal kere tydens die uitvoering van 'n makro gestel en verander kan word.

'n Dinamiese skikking word met leë hakies verklaar, soos volg:

Dim Team_Members() As String

Vervolgens sal jy die dimensie van die skikking moet verklaar tydens die uitvoering van die kode deur die uitdrukking te gebruik ReDim:

ReDim Span_Lede (1 tot 20)

En as jy tydens die uitvoering van die kode weer die grootte van die skikking moet verander, kan jy weer die ReDim-uitdrukking gebruik:

As Team_Size > 20 Dan ReDim Team_Members(1 to Team_Size) End If

Hou in gedagte dat die grootte van 'n dinamiese skikking op hierdie manier sal lei tot die verlies van alle waardes wat in die skikking gestoor is. Om data wat reeds in die skikking is te stoor, moet jy die sleutelwoord gebruik bewaarsoos hieronder getoon:

As Team_Size > 20 Dan ReDim Preserveer Team_Members(1 to Team_Size) End If

Ongelukkig die sleutelwoord bewaar kan slegs gebruik word om die boonste grens van 'n skikkingsdimensie te verander. Die onderste grens van 'n skikking kan nie op hierdie manier verander word nie. Ook, as die skikking veelvuldige dimensies het, gebruik dan die sleutelwoord bewaar, net die laaste dimensie van die skikking kan verander word.

Lewer Kommentaar