Arrayvariabler med VBA i Microsoft Excel 2010

Innehållsförteckning:

Anonim

Hur använder jag Excel VBA Array?

Du kan köra makron antingen från Visual Basic Editor genom att placera markören i makrot och trycka på F5 -tangenten, eller från Excel genom att öppna dialogrutan Makron (ALT+F8) genom att välja makrot som ska köras och klicka på Kör. Det är bäst att köra dessa makron från Visual Basic Editor med Debug> Steg in (genom att trycka på F8) så att du kan titta på dem medan de fungerar. Instruktion Om fliken Utvecklare inte finns i menyfliksområdet …

  • Öppna Excel.
  • Gå till VBA Editor (tryck på Alt + F11)
  • Gå till Omedelbart fönster. (Ctrl + G)
  • Skriv nedan kod.
    • Application.ShowDevTools = True

Så här sätter du in VBA -kod i Excel

  • Gå till Utvecklare Flik> Koda Grupp> Visual Basic
  • Klick Föra in > Modul.
  • Öppnar en tom modul för dig.
  • Skriv / klistra in den angivna koden i den modulen

Så här kör du VBA -kod i Excel

  • Välj var som helst mellan koden, Sub… End Sub
  • Klicka på Kör & Kör Sub eller F5

Statiska arrayvariabler

Istället för att använda flera unika variabler för att lagra information kan du använda en matrisvariabel.

När du vet hur många element du behöver lagra i matrisen kan du använda en statisk matrisvariabel så här:

Koda


Sub TestStaticArray ()
'lagrar 10 namn i arbetsboken i arrayvariabeln MyNames ()
Dim MyNames (1 To 10) As String 'deklarerar en statisk arrayvariabel
Dim iCount som heltal
För iCount = 1 Till ThisWorkbook.Sheets.Count
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
Debug.Print MyNames (iCount)
Nästa iCount
Erase MyNames () 'raderar innehållet i variabeln, frigör lite minne
Avsluta Sub

Avkoda

Dim MyNames (1 till 10) som sträng

Vi har dimension-ize en enda verifierbar MyNames som en sträng, som kan rymma 10 objekt i den. Så MyNames veriable är en Array -typ.

Dim iCount som heltal

Vi har deklarerat en enda variabel iCount som ett heltal, som bara kan innehålla värde för numeriskt heltal

För iCount = 1 Till ThisWorkbook.Sheets.Count

ThisWorkbook.Sheets.Count ger oss antal ark i en arbetsbok. ThisWorkbook, refererar till arbetsboken, där koden skrevs.

MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name

Med hjälp av en loop tilldelar vi varje arks namn till en enda verifierbar som heter MyNames. MyNames är en Array -typ som är verifierbar, så den lagrar varje arknamn i varje matrisartikel.

Debug.Print MyNames (iCount)

Strax efter att värdet har tilldelats varje objekt i en matris kommer det att skriva ut samma i ImmediateWindow, bydefault i botten av VBA -fönstret. Du kan se tilldelningen av varje värde och visa dess värde i ImmediateWindow.

Nästa iCount

Nästa används för att berätta för Loop i Excel VBA att upprepa samma uppgift igen, genom att öka iCount -räknaren, tills iCount nådde Totalt antal ark, i arbetsboken.

Dynamiska arrayvariabler

Dynamiska arrayvariabler är användbara när du i förväg inte vet hur många element du behöver lagra information om.

Du deklarerar dynamiska arrayvariabler precis som en statisk arrayvariabel, förutom att du inte ger någon information om arraystorleken.

I exemplet ovan (Dim MyNames (1 till 10) som sträng) om Antal ark större än 10 kommer det genom ett fel eftersom MyNames inte kan lagra mer än 10 objekt.

Koda

Sub TestDynamicArray ()
'lagrar alla namn i arbetsboken i matrisvariabeln MyNames ()
Dim MyNames () As String 'deklarerar en dynamisk array -variabel
Dim iCount som heltal
Dim Max som heltal
Max = ThisWorkbook.Sheets.Count 'hittar den maximala matrisstorleken
ReDim MyNames (1 To Max) 'deklarerar matrisvariabeln med den nödvändiga storleken
För iCount = 1 till max
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
MsgBox MyNames (iCount)
Nästa iCount
Erase MyNames () 'raderar det variabla innehållet, frigör lite minne
Avsluta Sub

Avkoda

Dim MyNames () Som sträng

Vi har dimension-ize en enda verifierbar MyNames som en sträng, som är en Array-typ, på grund av att öppna och stänga Paranthesis, efter det verifierbara namnet, men kommer inte att kunna lagra någon data i den, eftersom vi inte har tillhandahållit dess UpperLevel.

ReDim MyNames (1 till max)

Redim används för att om- dimensionera arrayen, den kommer nu att tilldela den övre nivån av Array Type Veriable.

I det här fallet, totalt antal ark i arbetsboken (Max = ThisWorkbook.Sheets.Count)

MsgBox MyNames (iCount)

I det sista exemplet har vi skrivit ut värdet i variabler i omedelbart fönster, den här gången skriver vi ut värdet i en MessageBox, som kommer att se ut så här …

Om du vet att du behöver en matrisvariabel med 1000 objekt, använd en statisk variabel. Nackdelen är att du kommer att använda minne för 1000 objekt varje gång, även om du bara lagrar information om 10 objekt. Om du använder en dynamisk array -variabel kommer du att använda minnet mer effektivt.

Ibland är det inte möjligt att beräkna hur stor matrisvariabeln måste vara. I dessa fall måste storleken på arrayvariabeln ökas efter behov. När du använder en ReDim-statement för att ändra matrisvariabelns storlek, variabelinnehållet raderas också för att undvika att ta bort variabelinnehållet när du Redim matrisvariabeln du måste använda ReDim Preserve-påstående.

Koda

Sub GetFileNameList ()
'lagrar alla filnamn i den aktuella mappen
Dim FolderFiles () As String 'deklarerar en dynamisk array -variabel
Dim tmp As String, fCount As Integer
fCount = 0
tmp = Dir ("D: \ Test \*.*")
Medan tmp Tom
fCount = fCount + 1
ReDim Preserve FolderFiles (1 till fCount)
'deklarerar matrisvariabeln igen (storlek+1)
FolderFiles (fCount) = tmp
tmp = Dir
Wend
MsgBox fCount & "filnamn finns i mappen" & CurDir
Erase FolderFiles 'raderar det variabla innehållet, frigör lite minne
Avsluta Sub

Avkoda

Dim FolderFiles () Som sträng

Vi har dimension-ize en enda verifierbar FolderFiles som en sträng, som är en Array-typ, på grund av att öppna och stänga Paranthesis, efter det verifierbara namnet, men kommer inte att kunna lagra några data i den, eftersom vi inte har tillhandahållit dess UpperLevel.

tmp = Dir ("D: \ Test \*.*")

Dir -kommandot fungerar som en explorer, som kan innehålla namnet på alla filer och mappar i en katalog. Du kan också begränsa alla filer till vissa specifika kriterier. Dir ("D: \ Test \*. Pdf") begränsas från alla filer till endast PDF -filer eller tillägg.

Medan tmp Tom

Istället för For loop i Excel VBA, den här gången upprepar vi samma åtgärd med Excel VBA WHILE LOOP, där kriterier för att avsluta loop var satt som tmp inte lika med tom. Så tills det fanns något värde i tmp veriable, loop kommer att fungera.

ReDim Preserve FolderFiles (1 till fCount)

Arrayverifierbara FolderFiles har ingen övre nivå vid utgångsläget. Men vid varje upprepning kommer den att öka sin övre nivå med ReDim -kommando. I första omgång 1, sedan 2 … och så vidare, tills fCount. Men för varje gång man ökar den övre nivån kommer den att förlora alla redan tilldelade variabler. Genom att använda kommandot Preserve kan vi behålla eller lagra det redan tilldelade värdet.

Wend

Wend brukade säga till For Loops i VBA att upprepa samma uppgift igen tills kriterierna uppfyllde.

MsgBox fCount & "filnamn finns i mappen" & CurDir

Vid varje upprepning kommer fcout att öka med +1, och det slutgiltiga värdet kommer att ha många filer som finns i den katalogen / mappen. CurDir -kommandot ger namnet på den aktuella katalogen. I det här fallet “D: \ Test”