Sådan bruges Excel VBA Array?
Du kan køre makroerne enten fra Visual Basic Editor ved at placere markøren i makroen og trykke på F5 -tasten eller fra Excel ved at åbne dialogboksen Makroer (ALT+F8) vælge den makro, der skal køres, og klikke på Kør. Det er bedst at køre disse makroer fra Visual Basic Editor ved hjælp af Debug> Træd ind (ved at trykke på F8) så du kan se dem, mens de fungerer. Instruktion Hvis fanen Udvikler ikke er i båndet …
- Åbn Excel.
- Gå til VBA Editor (tryk Alt + F11)
- Gå til Umiddelbart vindue. (Ctrl + G)
- Skriv nedenfor kode.
- Application.ShowDevTools = True
Sådan indsættes VBA -kode i Excel
- Gå til Udvikler Fane> Kode Gruppe> Visual Basic
- Klik på Indsæt > Modul.
- Åbner et tomt modul for dig.
- Skriv / indsæt den angivne kode i dette modul
Sådan køres VBA -kode i Excel
- Vælg et sted mellem koden, Sub… End Sub
- Klik på Kør & Kør Sub eller F5
Statiske array -variabler
I stedet for at bruge flere unikke variabler til at gemme oplysninger, kan du bruge en matrixvariabel.
Når du ved, hvor mange elementer du skal gemme i arrayet, kan du bruge en statisk array -variabel som denne:
Kode
Sub TestStaticArray ()
'gemmer 10 navne i projektmappen i matrixvariablen MyNames ()
Dim MyNames (1 To 10) As String 'erklærer en statisk array -variabel
Dim iCount som heltal
For iCount = 1 Til ThisWorkbook.Sheets.Count
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
Debug.Print MyNames (iCount)
Næste iCount
Erase MyNames () 'sletter variabelindholdet, frigør noget hukommelse
Afslut Sub
Afkode
Dim MyNames (1 til 10) som streng
Vi har dimension-ize en enkelt veriabel MyNames som en streng, som kan indeholde 10 genstande i den. Så MyNames veriable er en Array -type.
Dim iCount som heltal
Vi har erklæret en enkelt variabel iCount som et heltal, som kun kan indeholde Numeric Integer type Value
For iCount = 1 Til ThisWorkbook.Sheets.Count
ThisWorkbook.Sheets.Count giver os antal ark i en projektmappe. ThisWorkbook refererer til projektmappen, hvor koden blev skrevet.
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
Ved hjælp af en loop tildeler vi hvert arks navn til en enkelt verifierbar kaldet MyNames. MyNames er en Array -type, der er veriabel, så den gemmer hvert arknavn i hvert array -element.
Debug.Print MyNames (iCount)
Lige efter at værdien er tildelt hvert element i en matrix, udskrives den samme i ImmediateWindow, som standard i bunden af VBA -vinduet. Du kan se tildeling af hver værdi og vise dens værdi i ImmediateWindow.
Næste iCount
Næste bruges til at fortælle For Loop i Excel VBA, at gentage den samme opgave igen ved at øge iCount -tælleren, indtil iCount nåede det samlede antal ark, i projektmappen.
Dynamiske array -variabler
Dynamiske array -variabler er nyttige, når du på forhånd ikke ved, hvor mange elementer du skal gemme oplysninger om.
Du erklærer dynamiske array -variabler ligesom en statisk array -variabel, bortset fra at du ikke giver nogen oplysninger om arraystørrelsen.
I ovenstående eksempel (Dim MyNames (1 til 10) som streng) hvis Antal ark større end 10, vil det gennem en fejl, da MyNames ikke kan gemme mere end 10 element.
Kode
Sub TestDynamicArray ()
'gemmer alle navne i projektmappen i matrixvariablen MyNames ()
Dim MyNames () As String 'erklærer en dynamisk array -variabel
Dim iCount som heltal
Dim Max som heltal
Max = ThisWorkbook.Sheets.Count 'finder den maksimale matrisestørrelse
ReDim MyNames (1 To Max) 'erklærer matrixvariablen med den nødvendige størrelse
For iCount = 1 Til maks
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
MsgBox MyNames (iCount)
Næste iCount
Erase MyNames () 'sletter det variable indhold, frigør noget hukommelse
Afslut Sub
Afkode
Dim MyNames () som streng
Vi har dimension-ize et enkelt veriabelt MyNames som en streng, som er en Array-type, på grund af at åbne og lukke Paranthesis, efter det verificerede navn, men vil ikke være i stand til at gemme data i det, da vi ikke har leveret dets UpperLevel.
ReDim MyNames (1 til maks.)
Redim bruges til at re-dimensionere i arrayet, det vil nu tildele det øverste niveau af Array Type Veriable.
I dette tilfælde det samlede antal ark i projektmappen (Max = ThisWorkbook.Sheets.Count)
MsgBox MyNames (iCount)
I sidste eksempel har vi udskrevet værdien i variabler i det umiddelbare vindue, denne gang udskriver vi værdien i en MessageBox, som vil se sådan ud …
Hvis du ved, at du skal bruge en array -variabel med 1000 elementer, skal du bruge en statisk variabel. Bagsiden er, at du vil bruge hukommelse til 1000 emner hver gang, også i de tilfælde, hvor du kun gemmer oplysninger om 10 genstande. Hvis du bruger en dynamisk array -variabel, vil du bruge hukommelsen mere effektivt.
Nogle gange er det ikke muligt at beregne, hvor stor arrayvariablen skal være. I disse tilfælde skal størrelsen af matrixvariablen øges efter behov. Når du bruger en ReDim-erklæring for at ændre størrelsen på matrixvariablen, slettes variabelindholdet også for at undgå at slette variabelindholdet, når du Redim den array -variabel, du skal bruge ReDim Preserve-udmelding.
Kode
Sub GetFileNameList ()
'gemmer alle filnavne i den aktuelle mappe
Dim FolderFiles () As String 'erklærer en dynamisk array -variabel
Dim tmp As String, fCount As Integer
fCount = 0
tmp = Dir ("D: \ Test \*.*")
Mens tmp Tom
fCount = fCount + 1
ReDim Preserve FolderFiles (1 til fCount)
'erklærer matrixvariablen igen (størrelse+1)
FolderFiles (fCount) = tmp
tmp = Dir
Wend
MsgBox fCount & "filnavne findes i mappen" & CurDir
Erase FolderFiles 'sletter det variable indhold, frigør noget hukommelse
Afslut Sub
Afkode
Dim FolderFiles () Som streng
Vi har dimension-ize en enkelt veriabel FolderFiles som en streng, som er en Array-type, på grund af at åbne og lukke Paranthesis, efter det verificerende navn, men vil ikke være i stand til at gemme data i den, da vi ikke har leveret dens UpperLevel.
tmp = Dir ("D: \ Test \*.*")
Dir -kommandoen fungerer som en explorer, som kan gemme navnet på alle filer og mapper i et bibliotek. Du kan også begrænse alle filer til nogle specifikke kriterier. Dir ("D: \ Test \*. Pdf”) begrænser fra alle filer til kun PDF -filer eller udvidelser.
Mens tmp Tom
I stedet for For loop i Excel VBA gentager vi denne gang den samme handling ved hjælp af Excel VBA WHILE LOOP, hvor kriterier for at afslutte loop blev angivet som tmp ikke lig med tom. Så indtil der var nogen værdi i tmp veriable, vil loop fungere.
ReDim Preserve FolderFiles (1 til fCount)
Array -verificerbare mappefiler har ikke noget øvre niveau i startpositionen. Men i hver gentagelse vil det øge dets øvre niveau med ReDim -kommando. I første kørsel 1, derefter 2 … og så videre, indtil fCount. Men med hver gang det øvre niveau øges, mister det alle allerede tildelte variabler. Ved at bruge kommandoen Bevar kan vi gemme eller gemme den allerede tildelte værdi.
Wend
Wend plejede at fortælle For Loops i VBA, at gentage den samme opgave igen, indtil kriterierne opfyldte.
MsgBox fCount & "filnavne findes i mappen" & CurDir
Ved hver gentagelse vil fcout stige med +1, og den endelige værdi vil være et antal filer, der findes på den pågældende mappe / mappe. CurDir -kommandoen giver navnet på den aktuelle telefonbog. I dette tilfælde “D: \ Test”