Jak používat pole Excel VBA Array?
Makra můžete spustit buď z editoru jazyka Visual Basic tak, že umístíte kurzor do makra a stisknete klávesu F5, nebo z Excelu otevřením dialogového okna Makra (ALT+F8) zvolením makra ke spuštění a kliknutím na Spustit. Nejlepší je spustit tato makra z editoru jazyka Visual Basic pomocí Ladění> Vstupte do kroku (stisknutím klávesy F8) takže je můžete sledovat, jak pracují. Návod Pokud karta Vývojář není na pásu karet…
- Otevřete Excel.
- Přejděte do editoru VBA (stiskněte Alt + F11)
- Přejít na okamžité okno. (Ctrl + G)
- Napište níže Kód.
- Application.ShowDevTools = True
Jak vložit kód VBA do aplikace Excel
- Jít do Vývojář Karta> Kód Skupina> Visual Basic
- Klikněte Vložit > Modul.
- Otevře vám prázdný modul.
- Zapište / vložte poskytnutý kód do tohoto modulu
Jak spustit kód VBA v aplikaci Excel
- Vyberte kdekoli mezi kódem, Sub… End Sub
- Klikněte na Spustit a Spustit sub nebo F5
Proměnné statického pole
Místo použití několika unikátních proměnných k ukládání informací můžete použít proměnnou pole.
Když víte, kolik prvků potřebujete do pole uložit, můžete použít proměnnou statického pole takto:
Kód
Dílčí testStaticArray ()
'ukládá 10 jmen do sešitu v proměnné pole MyNames ()
Dim MyNames (1 To 10) As String 'deklaruje proměnnou statického pole
Dim iCount jako celé číslo
Pro iCount = 1 To ThisWorkbook.Sheets.Count
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
Debug.Print MyNames (iCount)
Další iCount
Vymazat MyNames () 'smaže obsah proměnné, uvolní část paměti
End Sub
Dekódovat
Dim MyNames (1 až 10) jako řetězec
Máme dimenze-ize jeden ověřitelný MyNames jako řetězec, který může obsahovat 10 položek v něm. MyNames veriable je tedy typ Array.
Dim iCount jako celé číslo
Jednu proměnnou iCount jsme deklarovali jako Integer, která může obsahovat pouze hodnotu typu Numeric Integer
Pro iCount = 1 To ThisWorkbook.Sheets.Count
ThisWorkbook.Sheets.Count nám poskytne počet listů v sešitu. ThisWorkbook, odkazuje na sešit, ve kterém byl napsán kód.
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
Pomocí smyčky přiřadíme název každého listu jedné ověřitelné zvané MyNames. MyNames je typ pole ověřitelný, takže bude ukládat každý název listu do každé položky pole.
Debug.Print MyNames (iCount)
Hned po přiřazení hodnoty každé položce pole vytiskne totéž v ImmediateWindow, podle výchozího nastavení v dolní části okna VBA. V ImmediateWindow můžete zobrazit přiřazení každé hodnoty a zobrazit její hodnotu.
Další iCount
Další se používá pro příkaz Pro smyčku v aplikaci Excel VBA, aby se stejný úkol opakoval znovu zvýšením čítače iCount, dokud iCount v sešitu nedosáhne celkového počtu listů.
Proměnné dynamického pole
Proměnné dynamického pole jsou užitečné, když předem nevíte, o kolika prvcích potřebujete uložit informace.
Proměnné dynamického pole deklarujete stejně jako proměnné statického pole, kromě toho, že neposkytujete žádné informace o velikosti pole.
Ve výše uvedeném příkladu (Dim MyNames (1 až 10) jako řetězec) pokud je počet listů větší než 10, dojde k chybě, protože MyNames nebude moci uložit více než 10 položek.
Kód
Dílčí testDynamicArray ()
'ukládá všechna jména do sešitu v proměnné pole MyNames ()
Dim MyNames () As String 'deklaruje proměnnou dynamického pole
Dim iCount jako celé číslo
Dim Max jako celé číslo
Max = ThisWorkbook.Sheets.Count 'najde maximální velikost pole
ReDim MyNames (1 To Max) 'deklaruje proměnnou pole s potřebnou velikostí
Pro iCount = 1 až max
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
MsgBox MyNames (iCount)
Další iCount
Vymazat MyNames () 'odstraní variabilní obsah, uvolní část paměti
End Sub
Dekódovat
Dim MyNames () jako řetězec
Máme dimenze-ize jednu ověřitelnou MyNames jako řetězec, což je typ Array, kvůli otevírání a zavírání Paranthesis, za ověřitelným názvem, ale nebudeme moci do ní ukládat žádná data, protože jsme neposkytli její UpperLevel.
ReDim MyNames (1 až max)
Redim se používá k opětovnému dimenzování pole, nyní přiřadí horní úroveň typu pole Veriable.
V tomto případě celkový počet listů v sešitu (Max = ThisWorkbook.Sheets.Count)
MsgBox MyNames (iCount)
V posledním příkladu jsme vytiskli hodnotu v proměnných v okamžitém okně, tentokrát tiskneme hodnotu v MessageBoxu, který bude vypadat takto…
Pokud víte, že budete potřebovat proměnnou pole s 1000 položkami, použijte statickou proměnnou. Temnější stránkou je, že pokaždé využijete paměť na 1 000 položek, a to i v případech, kdy ukládáte pouze informace o 10 položkách. Pokud použijete proměnnou dynamického pole, využijete paměť efektivněji.
Někdy není možné vypočítat, jak velká proměnná pole bude muset být. V těchto případech je třeba velikost proměnné pole podle potřeby zvětšit. Když použijete a ReDim-statement pro změnu velikosti proměnné pole, obsah proměnné se také vymaže, aby se zabránilo vymazání obsahu proměnné, když vy Redim proměnnou pole, kterou budete potřebovat k použití Zachovat ReDim-tvrzení.
Kód
Sub GetFileNameList ()
'ukládá všechny názvy souborů do aktuální složky
Dim FolderFiles () As String 'deklaruje proměnnou dynamického pole
Dim tmp jako řetězec, fCount jako celé číslo
fCount = 0
tmp = Dir ("D: \ Test \*.*")
Zatímco tmp Empty
fCount = fCount + 1
ReDim Preserve FolderFiles (1 To fCount)
'deklaruje proměnnou pole znovu (velikost+1)
FolderFiles (fCount) = tmp
tmp = Dir
Zamířit
MsgBox fCount & "názvy souborů se nacházejí ve složce" & CurDir
Vymazat FolderFiles 'odstraní variabilní obsah, uvolní část paměti
End Sub
Dekódovat
Dim FolderFiles () jako řetězec
Máme dimenze-ize jednoho ověřitelného FolderFiles jako String, což je typ Array, kvůli open & close Paranthesis, za ověřitelným názvem, ale nebude do něj možné ukládat žádná data, protože jsme neposkytli jeho UpperLevel.
tmp = Dir ("D: \ Test \*.*")
Příkaz Dir funguje jako průzkumník, který může obsahovat název všech souborů a složek v adresáři. Můžete také omezit všechny soubory na některá konkrétní kritéria. Dir („D: \ Test \*. Pdf“) omezí ze všech souborů pouze na soubory PDF nebo příponu.
Zatímco tmp Empty
Místo smyčky For v aplikaci Excel VBA tentokrát opakujeme stejnou akci pomocí programu Excel VBA WHILE LOOP, kde byla kritéria pro ukončení smyčky nastavena jako tmp, které se nerovná prázdnému. Takže dokud nebyla v tmp jakákoli hodnota ověřitelná, smyčka bude fungovat.
ReDim Preserve FolderFiles (1 To fCount)
Array veriable FolderFiles nemají ve výchozí pozici žádnou vyšší úroveň. Ale v každém opakování zvýší svou horní úroveň příkazem ReDim. V prvním běhu 1, potom 2… a tak dále, až do fCount. Při každém zvýšení horní úrovně však ztratí všechny již přiřazené proměnné. Pomocí příkazu Zachovat můžeme podržet nebo uložit již přiřazenou hodnotu.
Zamířit
Wend zvykl říkat For Loops ve VBA, aby opakoval stejný úkol znovu, dokud nebudou splněna kritéria.
MsgBox fCount & "názvy souborů se nacházejí ve složce" & CurDir
Při každém opakování se fcout zvýší o +1 a jeho konečná hodnota sníží počet souborů nalezených v tomto adresáři / složce. Příkaz CurDir udává název aktuálního adresáře. V tomto případě „D: \ Test“