Massiivmuutujad, kasutades Microsoft Excel 2010 VBA -d

Lang L: none (table-of-contents):

Anonim

Kuidas kasutada Excel VBA massiivi?

Makroid saate käivitada kas Visual Basic Editorist, asetades kursori makrosse ja vajutades klahvi F5, või Excelist, avades dialoogiboksi Makrod (ALT+F8), valides käivitatava makro ja klõpsates nuppu Käivita. Parim on käivitada need makrod Visual Basic Editorist, kasutades Silumine> Astuge sisse (vajutades klahvi F8) et saaksite neid vaadata, kuidas nad töötavad. Juhend Kui vahekaart Arendaja pole lindil…

  • Avage Excel.
  • Minge VBA redaktorisse (vajutage Alt + F11)
  • Minge kohe aknasse. (Ctrl + G)
  • Kirjutage kood alla.
    • Application.ShowDevTools = Tõsi

Kuidas sisestada VBA -kood Excelisse

  • Minema Arendaja Tab> Kood Rühm> Visual Basic
  • Klõpsake nuppu Sisesta > Moodul.
  • Avab teile tühja mooduli.
  • Kirjutage / kleepige sellesse moodulisse antud kood

Kuidas VBA -koodi Excelis käivitada

  • Valige koodist ükskõik kus, Alam… Lõpp Alam
  • Klõpsake nuppu Käivita & Käivita alam või F5

Staatilised massiivi muutujad

Selle asemel, et teabe salvestamiseks kasutada mitut unikaalset muutujat, võite kasutada massiivmuutujat.

Kui teate, kui palju elemente peate massiivi salvestama, võite kasutada sellist staatilist massiivi muutujat:

Kood


Sub TestStaticArray ()
'salvestab töövihikus 10 nime massiivimuutuja MyNames ()
Dim MyNames (1 kuni 10) kui string 'deklareerib staatilise massiivi muutuja
Dim iCount täisarvuna
ICount jaoks = 1 sellele töövihikule. Lehed. Arv
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Nimi
Silumine. Prindi MyNames (iCount)
Järgmine iCount
Erase MyNames () 'kustutab muutuva sisu, vabastab mälu
End Sub

Dekodeeri

Dim MyNames (1 kuni 10) stringina

Meil on mõõtmetega stringina üks kontrollitav MyNames, mis mahutab 10 üksust. Nii et MyNames veriable on massiivi tüüp.

Dim iCount täisarvuna

Oleme deklareerinud täisarvuna ühe muutuja iCount, mis mahutab ainult täisarvulise arvväärtuse

ICount jaoks = 1 sellele töövihikule. Lehed. Arv

ThisWorkbook.Sheets.Count annab meile töövihiku lehtede arvu. Käesolev töövihik viitab töövihikule, millesse kood kirjutati.

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

Silmuse abil määrame iga lehe nime ühele kontrollitavale nimele MyNames. MyNames on massiivi tüüp, mida saab kontrollida, nii et see salvestab iga lehe nime igas massiiviüksuses.

Silumine. Prindi MyNames (iCount)

Vahetult pärast väärtuse määramist massiivi igale üksusele prindib see sama ka ImmediateWindow, vaikimisi VBA akna allosas. Saate vaadata iga väärtuse määramist ja kuvada selle väärtuse ImmediateWindow'is.

Järgmine iCount

Järgmist kasutatakse Exceli VBA -s Loop jaoks, et korrata sama ülesannet uuesti, suurendades iCount Counterit, kuni iCount jõudis töövihikus lehtede koguarvuni.

Dünaamilise massiivi muutujad

Dünaamilise massiivi muutujad on kasulikud, kui te ei tea ette, kui paljude elementide kohta teabe salvestamiseks vajate.

Deklareerite dünaamilise massiivi muutujad nagu staatilise massiivi muutuja, välja arvatud see, et te ei anna massiivi suuruse kohta mingit teavet.

Ülaltoodud näites (Dim MyNames (1 kuni 10) stringina) Kui lehtede arv on suurem kui 10, saab see vea, kuna MyNames ei salvesta rohkem kui 10 üksust.

Kood

AlamkatseDynamicArray ()
'salvestab kõik töövihiku nimed massiivimuutuja MyNames ()
Dim MyNames () kui string 'deklareerib dünaamilise massiivi muutuja
Dim iCount täisarvuna
Dim Max täisarvuna
Max = ThisWorkbook.Sheets.Count 'leiab massiivi maksimaalse suuruse
ReDim MyNames (1 kuni Max) 'deklareerib massiivi muutuja vajaliku suurusega
ICount = 1 kuni maks
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Nimi
MsgBoxi MyNames (iCount)
Järgmine iCount
Erase MyNames () 'kustutab muutuva sisu, vabastab mälu
End Sub

Dekodeeri

Dim MyNames () stringina

Meil on dimensiooniväljaandena stringina üks kontrollitav MyNames, mis on massiivi tüüp, avamis- ja sulgemisparanteesi tõttu pärast kontrollitavat nime, kuid ei saa sellesse andmeid salvestada, kuna me ei ole selle ülemist taset esitanud.

ReDim MyNames (1 kuni Max)

Redimi kasutatakse massiivi mõõtmete muutmiseks, nüüd määrab massiivi tüüp Veriable ülemise taseme.

Sel juhul töövihiku lehtede koguarv (Max = ThisWorkbook.Sheets.Count)

MsgBoxi MyNames (iCount)

Viimases näites oleme printinud väärtuse muutujate vahetu aknasse, seekord trükime väärtuse MessageBoxi, mis kuvatakse nii …

Kui teate, et vajate massiivmuutujat 1000 üksusega, kasutage staatilist muutujat. Negatiivne külg on see, et kasutate mälu iga kord 1000 üksuse jaoks, ka juhtudel, kui salvestate teavet ainult 10 üksuse kohta. Kui kasutate dünaamilise massiivi muutujat, kasutate mälu tõhusamalt.

Mõnikord ei ole võimalik arvutada, kui suur massiivi muutuja peab olema. Sellistel juhtudel tuleb massiivi muutuja suurust vastavalt vajadusele suurendada. Kui kasutate a ReDim-avaldus massiivi muutuja suuruse muutmiseks, kustutatakse ka muutujate sisu, et vältida muutuja sisu kustutamist, kui Redim massiivi muutuja, mida peate kasutama ReDim Preserve-avaldus.

Kood

Alamfail GetFileNameList ()
'salvestab kõik failinimed praegusesse kausta
Dim FolderFiles () kui string 'deklareerib dünaamilise massiivi muutuja
Dim tmp kui string, fCount As Integer
fCount = 0
tmp = Dir ("D: \ Test \*.*")
Kuigi tmp Tühi
fCount = fCount + 1
ReDim säilitab kaustafailid (1 kuni fCount)
'deklareerib massiivi muutuja uuesti (suurus+1)
FolderFiles (fCount) = tmp
tmp = Rež
Wend
MsgBox fCount & "failinimed asuvad kaustas" & CurDir
Erase FolderFiles kustutab muutuva sisu, vabastab mälu
End Sub

Dekodeeri

Dim FolderFiles () stringina

Meil on dimensiooniväljaandena üks kontrollitav FolderFiles stringina, mis on massiivi tüüp, avamis- ja sulgemisparanteesi tõttu pärast kontrollitavat nime, kuid ei saa sellesse andmeid salvestada, kuna me pole selle ülemist taset esitanud.

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

Dir käsk töötab maadeavastajana, mis mahutab kataloogi kõigi failide ja kaustade nime. Samuti saate piirata kõiki faile teatud kriteeriumidega. Dir ("D: \ Test \*. Pdf") piirab kõikidest failidest ainult PDF -faile või laiendusi.

Kuigi tmp Tühi

Selle asemel, et Exceli VBA silmus, kordame seekord sama toimingut, kasutades Excel VBA WHILE LOOPi, kus silmuse lõpetamise kriteeriumiks määrati tmp mitte võrdne tühjaga. Niisiis, kuni tmp kontrollitav väärtus oli olemas, töötab tsükkel.

ReDim säilitab kaustafailid (1 kuni fCount)

Massiivi kontrollitavatel FolderFilesidel pole lähteasendis ülemist taset. Kuid iga korduse korral suurendab see oma ülemist taset ReDimi käsu abil. Esimesel käivitamisel 1, siis 2… ja nii edasi, kuni fCount. Kuid iga kord, kui suurendate ülemist taset, kaotab see kõik juba määratud muutujad. Kasutades käsku Säilita, saame hoida või salvestada juba määratud väärtuse.

Wend

Wend ütles VBA -s For Loopsile, et korrata sama ülesannet uuesti, kuni kriteeriumid on täidetud.

MsgBox fCount & "failinimed asuvad kaustas" & CurDir

Iga korduse korral suureneb fcout +1 võrra ja selle lõppväärtus suurendab selles kataloogis / kaustas leiduvate failide arvu. Käsk CurDir annab praeguse kataloogi nime. Sel juhul “D: \ Test”