Niz spremenljivk z uporabo VBA v programu Microsoft Excel 2010

Kazalo:

Anonim

Kako uporabljati Excel VBA Array?

Makre lahko zaženete iz urejevalnika Visual Basic, tako da postavite kazalec v makro in pritisnete tipko F5, ali pa iz Excela, tako da odprete pogovorno okno Makri (ALT+F8), izberete makro za zagon in kliknete Zaženi. Najbolje je, da te makre zaženete v urejevalniku Visual Basic z uporabo Debug> Step Innto (s pritiskom na F8) zato jih lahko opazujete, ko delujejo. Navodila Če zavihek Razvijalec ni na traku …

  • Odprite Excel.
  • Pojdite v urejevalnik VBA (pritisnite Alt + F11)
  • Pojdite na takojšnje okno. (Ctrl + G)
  • Spodaj napišite kodo.
    • Application.ShowDevTools = Res

Kako vstaviti kodo VBA v Excel

  • Pojdi do Razvijalec Zavihek> Koda Skupina> Visual basic
  • Kliknite Vstavi > Modul.
  • Odprl vam bo prazen modul.
  • V ta modul napišite / prilepite kodo

Kako zagnati kodo VBA v Excelu

  • Izberite kjer koli med kodo, Sub… End Sub
  • Kliknite Zaženi & Zaženi Sub ali F5

Statične spremenljivke matrike

Namesto da uporabite več edinstvenih spremenljivk za shranjevanje informacij, lahko uporabite spremenljivko niza.

Ko veste, koliko elementov morate shraniti v matriko, lahko uporabite takšno spremenljivko statične matrike:

Koda


Pod TestStaticArray ()
'shrani 10 imen v delovni zvezek v spremenljivko niza MyNames ()
Dim MyNames (1 do 10) As String 'razglasi statično spremenljivko matrike
Zatemni iCount kot celo število
For iCount = 1 To ThisWorkbook.Sheets.Count
MyNames (iCount) = Ta delovna knjiga. Preglednice (iCount). Ime
Debug.Print MyNames (iCount)
Naslednji iCount
Erase MyNames () 'izbriše vsebino spremenljivke, sprosti nekaj pomnilnika
End Sub

Dešifriraj

Zatemni MyNames (1 do 10) kot niz

Imamo dimenzijsko eno samo spremenljivo ime MyNames kot niz, ki lahko vsebuje 10 elementov. MyNames veriable je torej vrsta matrike.

Zatemni iCount kot celo število

Posamezno spremenljivko iCount smo razglasili za celo število, ki lahko vsebuje samo vrednost številskega celega števila

For iCount = 1 To ThisWorkbook.Sheets.Count

ThisWorkbook.Sheets.Count nam bo dal število listov v delovnem zvezku. Ta delovni zvezek se nanaša na delovni zvezek, v katerem je bila napisana koda.

MyNames (iCount) = Ta delovna knjiga. Preglednice (iCount). Ime

Z zanko dodelimo ime vsakega lista eni sami spremenljivki, imenovani MyNames. MyNames je spremenljiv tip polja, zato bo shranil ime vsakega lista v vsakem elementu matrike.

Debug.Print MyNames (iCount)

Takoj po dodelitvi vrednosti vsakemu elementu matrike bo isto natisnilo v ImmediateWindow, privzeto na dnu okna VBA. Dodelitev vsake vrednosti si lahko ogledate in njeno vrednost prikažete v neposrednem oknu.

Naslednji iCount

Naslednji se uporablja za povezovanje For Loop v Excelu VBA, naj znova ponovi isto nalogo s povečanjem števca iCount, dokler iCount ne doseže skupnega števila listov v delovnem zvezku.

Spremenljivke dinamičnega niza

Spremenljivke dinamičnega polja so uporabne, če vnaprej ne veste, za koliko elementov morate shraniti podatke.

Dinamične spremenljivke matrike razglašate tako kot spremenljivko statične matrike, le da ne podajate podatkov o velikosti matrike.

V zgornjem primeru (Zatemni MyNames (1 do 10) kot niz) če je število listov večje od 10, bo prišlo do napake, saj MyNames ne bo mogel shraniti več kot 10 elementov.

Koda

Pod TestDynamicArray ()
'shrani vsa imena v delovnem zvezku v spremenljivko niza MyNames ()
Dim MyNames () As String 'razglasi spremenljivko dinamičnega niza
Zatemni iCount kot celo število
Dim Max kot celo število
Max = ThisWorkbook.Sheets.Count 'najde največjo velikost matrike
ReDim MyNames (1 To Max) 'razglasi spremenljivko matrike s potrebno velikostjo
Za iCount = 1 do maks
MyNames (iCount) = Ta delovna knjiga. Preglednice (iCount). Ime
MsgBox Moja imena (iCount)
Naslednji iCount
Erase MyNames () 'izbriše spremenljivo vsebino in sprosti nekaj pomnilnika
End Sub

Dešifriraj

Zatemni MyNames () kot niz

Razporedimo eno samo spremenljivo ime MyNames kot niz, ki je vrsta niza, zaradi odpiranja in zapiranja paranteze, po spremenljivem imenu, vendar vanj ne moremo shraniti nobenih podatkov, saj nismo zagotovili njegove zgornje ravni.

ReDim MyNames (od 1 do največ)

Redim se uporablja za ponovno dimenzioniranje matrike, zdaj bo dodelil zgornjo raven spremenljivke vrste matrike.

V tem primeru skupno število listov v delovnem zvezku (Max = ThisWorkbook.Sheets.Count)

MsgBox Moja imena (iCount)

V zadnjem primeru smo vrednost v spremenljivkah natisnili v neposrednem oknu, tokrat vrednost natisnemo v MessageBoxu, ki bo videti tako …

Če veste, da boste potrebovali spremenljivko matrike s 1000 elementi, uporabite statično spremenljivko. Slaba stran je, da boste vsakič uporabili pomnilnik za 1000 predmetov, tudi v primerih, ko shranite le podatke o 10 elementih. Če uporabljate spremenljivko dinamičnega niza, boste pomnilnik uporabili učinkoviteje.

Včasih ni mogoče izračunati, kako velika mora biti spremenljivka matrike. V teh primerih je treba velikost spremenljivke matrike po potrebi povečati. Ko uporabljate a ReDim-izjava za spremembo velikosti spremenljivke matrike, se tudi vsebina spremenljivke izbriše, da se izognete brisanju vsebine spremenljivke, ko Redim spremenljivko matrike, ki jo boste morali uporabiti ReDim Preserve-izjava.

Koda

Sub GetFileNameList ()
'shrani vsa imena datotek v trenutno mapo
Dim FolderFiles () As String 'razglasi spremenljivko dinamičnega niza
Zatemni tmp kot niz, fCount kot celo število
fCount = 0
tmp = Dir ("D: \ Test \*.*")
Medtem ko je tmp Empty
fCount = fCount + 1
ReDim Preserve FolderFiles (1 do fCount)
'znova razglasi spremenljivko matrike (velikost+1)
FolderFiles (fCount) = tmp
tmp = Dir
Wend
MsgBox fCount & "imena datotek so v mapi" & CurDir
Erase FolderFiles 'izbriše spremenljivo vsebino in sprosti nekaj pomnilnika
End Sub

Dešifriraj

Dim FolderFiles () kot niz

Imamo dimenzijsko eno samo spremenljivo datoteko FolderFiles kot niz, ki je vrsta niza, zaradi odpiranja in zapiranja paranteze, po spremenljivem imenu, vendar v njej ne bo mogoče shraniti nobenih podatkov, saj nismo zagotovili njene zgornje ravni.

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

Ukaz Dir deluje kot raziskovalec, ki lahko vsebuje ime vseh datotek in map v imeniku. Vse datoteke lahko omejite tudi na določena merila. Dir ("D: \ Test \*. Pdf") bo omejil vse datoteke samo na datoteke PDF ali razširitve.

Medtem ko je tmp Empty

Namesto zanke For v Excelu VBA tokrat ponavljamo isto dejanje z uporabo Excela VBA WHILE LOOP, kjer so bili kriteriji za končno zanko nastavljeni kot tmp, ki ni enaka praznem. Torej, dokler v tmp ni bilo nobene vrednosti, je zanka delovala.

ReDim Preserve FolderFiles (1 do fCount)

Mape, ki jih je mogoče spremeniti, v začetnem položaju nimajo zgornje ravni. Toda pri vsaki ponovitvi bo z ukazom ReDim povečal svojo zgornjo raven. V prvem zagonu 1, nato 2 … in tako naprej, do fCount.Če pa vsakič, ko povečate zgornjo raven, izgubi vse že dodeljene spremenljivke. Z ukazom Preserve lahko hranimo ali shranimo že dodeljeno vrednost.

Wend

Wend je za V zanke v VBA povedal, naj ponovi isto nalogo, dokler merila ne izpolnijo.

MsgBox fCount & "imena datotek so v mapi" & CurDir

Ob vsaki ponovitvi se bo fcout povečal za +1, njegova končna vrednost pa bo število datotek v tem imeniku / mapi. Ukaz CurDir daje ime trenutnega imenika. V tem primeru "D: \ Test"