Pole premenných pomocou jazyka VBA v programe Microsoft Excel 2010

Obsah:

Anonim

Ako používať pole Excel VBA Array?

Makrá môžete spustiť buď z editora jazyka Visual Basic tak, že umiestnite kurzor do makra a stlačíte kláves F5, alebo z Excelu otvorením dialógového okna Makrá (ALT+F8) vyberiete makro, ktoré chcete spustiť, a kliknete na položku Spustiť. Najlepšie je spustiť tieto makrá z editora jazyka Visual Basic pomocou Ladenie> Vstúpiť (stlačením klávesu F8) aby ste ich mohli sledovať, ako pracujú. Pokyn Ak karta Vývojár nie je na páse s nástrojmi…

  • Otvorte Excel.
  • Prejdite do editora VBA (stlačte Alt + F11)
  • Prejdite do okamžitého okna. (Ctrl + G)
  • Napíšte nižšie Kód.
    • Application.ShowDevTools = Pravda

Ako vložiť kód VBA do programu Excel

  • Ísť do Vývojár Karta> Kód Skupina> Visual Basic
  • Kliknite Vložiť > Modul.
  • Otvorí vám prázdny modul.
  • Zapíšte / prilepte poskytnutý kód do tohto modulu

Ako spustiť kód VBA v programe Excel

  • Vyberte kdekoľvek medzi kódom, Sub… End Sub
  • Kliknite na položku Spustiť a Spustiť sub alebo F5

Statické premenné poľa

Namiesto použitia niekoľkých jedinečných premenných na ukladanie informácií môžete použiť premennú poľa.

Keď viete, koľko prvkov musíte do poľa uložiť, môžete použiť statickú premennú poľa takto:

Kód


Sub TestStaticArray ()
'uloží 10 mien do zošita v premennej poľa MyNames ()
Dim MyNames (1 až 10) As String 'deklaruje premennú statického poľa
Dim iCount ako celé číslo
Pre iCount = 1 To ThisWorkbook.Sheets.Count
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
Debug.Print MyNames (iCount)
Ďalší iCount
Vymazať MyNames () 'vymaže obsah premennej, uvoľní časť pamäte
Koniec pod

Dekódovať

Dim MyNames (1 až 10) ako reťazec

Máme dimenziu-jednu verifikovateľnú funkciu MyNames ako reťazec, do ktorej sa zmestí 10 položiek. MyNames veriable je teda typ poľa.

Dim iCount ako celé číslo

Jednu premennú iCount sme deklarovali ako Integer, ktorá môže obsahovať iba hodnotu typu Numeric Integer

Pre iCount = 1 To ThisWorkbook.Sheets.Count

ThisWorkbook.Sheets.Count nám poskytne počet listov v zošite. ThisWorkbook, odkazuje na zošit, v ktorom bol napísaný kód.

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

Pomocou slučky priradíme názov každého hárka k jednej verifikovateľnej položke Moje mená. MyNames je typ poľa overiteľný, takže bude ukladať názvy jednotlivých hárkov do každej položky poľa.

Debug.Print MyNames (iCount)

Hneď po priradení hodnoty ku každej položke poľa sa vytlačí to isté v programe ImmediateWindow, predvolene v spodnej časti okna VBA. Priradenie každej hodnoty si môžete pozrieť a zobraziť jej hodnotu v okne ImmediateWindow.

Ďalší iCount

Ďalej sa používa na príkaz For Loop v programe Excel VBA, aby zopakoval rovnakú úlohu znova zvýšením počítadla iCount, kým iCount v zošite nedosiahne celkový počet hárkov.

Dynamické premenné poľa

Dynamické premenné poľa sú užitočné, keď vopred neviete, o koľkých prvkoch potrebujete uložiť informácie.

Dynamické premenné poľa deklarujete rovnako ako premenné statického poľa, okrem toho, že neposkytujete žiadne informácie o veľkosti poľa.

Vo vyššie uvedenom príklade (Dim MyNames (1 až 10) ako reťazec) ak je počet listov väčší ako 10, dôjde k chybe, pretože server MyNames nebude môcť uložiť viac ako 10 položiek.

Kód

Sub TestDynamicArray ()
'uloží všetky mená do zošita v premennej poľa MyNames ()
Dim MyNames () As String 'deklaruje premennú dynamického poľa
Dim iCount ako celé číslo
Dim Max ako celé číslo
Max = ThisWorkbook.Sheets.Count 'nájde maximálnu veľkosť poľa
ReDim MyNames (1 To Max) 'deklaruje premennú poľa s potrebnou veľkosťou
Pre iCount = 1 až max
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
MsgBox MyNames (iCount)
Ďalší iCount
Vymazať MyNames () 'vymaže variabilný obsah, uvoľní časť pamäte
Koniec pod

Dekódovať

Dim MyNames () ako reťazec

Máme dimenziu-jednu verifikovateľnú MyNames ako reťazec, čo je typ Array, kvôli otvorenej a zatvorenej Paranthesis, za overiteľným názvom, ale nebudeme môcť do nej ukladať žiadne údaje, pretože sme neposkytli UpperLevel.

ReDim MyNames (1 až max)

Redim sa používa na opätovné dimenzovanie poľa, teraz priradí hornú úroveň typu poľa verifikovateľného.

V tomto prípade celkový počet listov v zošite (Max = ThisWorkbook.Sheets.Count)

MsgBox MyNames (iCount)

V poslednom prípade sme vytlačili hodnotu v premenných v okamžitom okne, tentoraz hodnotu vytlačíme v MessageBoxe, ktorý bude vyzerať takto …

Ak viete, že budete potrebovať premennú poľa s 1 000 položkami, použite statickú premennú. Temnejšou stránkou veci je, že zakaždým použijete pamäť na 1 000 položiek, a to aj v prípadoch, keď ukladáte iba informácie o 10 položkách. Ak použijete premennú dynamického poľa, využijete pamäť efektívnejšie.

Niekedy nie je možné vypočítať, aká veľká bude musieť byť premenná poľa. V týchto prípadoch je potrebné veľkosť premennej poľa podľa potreby zvýšiť. Keď použijete a ReDim-príkaz na zmenu veľkosti premennej poľa, obsah premennej sa tiež vymaže, aby sa zabránilo vymazaniu obsahu premennej, keď vy Redim premenná poľa, ktorú budete potrebovať na použitie Zachovať ReDim-vyhlásenie.

Kód

Sub GetFileNameList ()
'uloží všetky názvy súborov do aktuálneho priečinka
Dim FolderFiles () As String 'deklaruje premennú dynamického poľa
Dim tmp ako reťazec, fCount ako celé číslo
fCount = 0
tmp = Dir ("D: \ Test \*.*")
Kým tmp Empty
fCount = fCount + 1
ReDim Zachovať priečinkové súbory (1 až fCount)
“deklaruje znova premennú poľa (veľkosť+1)
FolderFiles (fCount) = tmp
tmp = réžia
Wend
MsgBox fCount & "názvy súborov sa nachádzajú v priečinku" & CurDir
Vymazať FolderFiles 'vymaže variabilný obsah, uvoľní časť pamäte
Koniec pod

Dekódovať

Dim FolderFiles () ako reťazec

Máme rozmer-ize jeden overiteľný FolderFiles ako reťazec, čo je typ Array, kvôli otvorenej a zatvorenej Paranthesis, za overiteľným názvom, ale nebudeme môcť do neho ukladať žiadne údaje, pretože sme neposkytli jeho UpperLevel.

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

Príkaz Dir funguje ako prieskumník, ktorý môže obsahovať názvy všetkých súborov a priečinkov v adresári. Všetky súbory môžete obmedziť aj na niektoré konkrétne kritériá. Dir („D: \ Test \*. Pdf“) obmedzí všetky súbory iba na súbory alebo prípony PDF.

Zatiaľ čo tmp je prázdny

Namiesto cyklu For v programe Excel VBA tentoraz opakujeme rovnakú akciu pomocou programu Excel VBA WHILE LOOP, kde boli kritériá pre ukončenie cyklu nastavené ako tmp, ktoré sa nerovná prázdnemu. Takže, kým nebude existovať akákoľvek hodnota v tmp, ktorú je možné overiť, bude slučka fungovať.

ReDim Zachovať priečinkové súbory (1 až fCount)

Array veriable FolderFiles nemá v počiatočnej polohe žiadnu hornú úroveň. Ale pri každom opakovaní zvýši svoju hornú úroveň príkazom ReDim. V prvom behu 1, potom 2 … a tak ďalej, až do fCount. Pri každom zvýšení hornej úrovne však stratí všetky už priradené premenné. Použitím príkazu Zachovať môžeme podržať alebo uložiť už priradenú hodnotu.

Wend

Wend zvykol hovoriť pre slučky vo VBA, aby zopakovali rovnakú úlohu znova, kým nebudú splnené kritériá.

MsgBox fCount & "názvy súborov sa nachádzajú v priečinku" & CurDir

Pri každom opakovaní sa fcout zvýši o +1 a jeho konečná hodnota zníži počet súborov nájdených v tomto adresári / priečinku. Príkaz CurDir uvádza názov aktuálneho adresára. V tomto prípade „D: \ Test“