Rasporedite varijable pomoću VBA u programu Microsoft Excel 2010

Sadržaj:

Anonim

Kako koristiti Excel VBA niz?

Makronaredbe možete pokrenuti bilo iz uređivača Visual Basic -a postavljanjem kursora u makronaredbu i pritiskom na tipku F5, bilo iz programa Excel otvaranjem dijaloškog okvira Makroi (ALT+F8) odabirom makronaredbe za pokretanje i klikom na Pokreni. Najbolje je pokrenuti ove makronaredbe iz programa Visual Basic Editor pomoću Debug> Step Innto (pritiskom na F8) pa ih možete gledati dok rade. Uputa Ako kartica Developer nije na vrpci …

  • Otvorite Excel.
  • Idite na VBA Editor (pritisnite Alt + F11)
  • Idite na Neposredni prozor. (Ctrl + G)
  • Napiši ispod Kod.
    • Application.ShowDevTools = Istina

Kako umetnuti VBA kôd u Excel

  • Ići Programer Kartica> Kodirati Grupa> Visual Basic
  • Klik Umetnuti > Modul.
  • Otvorit će vam prazan modul.
  • Napišite / zalijepite navedeni kod u taj modul

Kako pokrenuti VBA kod u Excelu

  • Odaberite bilo gdje između koda, Sub… Kraj Sub
  • Pritisnite Pokreni & Pokreni Sub ili F5

Statičke varijable niza

Umjesto korištenja nekoliko jedinstvenih varijabli za spremanje podataka, možete koristiti varijablu niza.

Kad znate koliko elemenata trebate pohraniti u polje, možete upotrijebiti statičku varijablu niza poput ove:

Kodirati


Pod TestStaticArray ()
'sprema 10 imena u radnu knjigu u varijablu polja MyNames ()
Dim MyNames (1 do 10) As String 'deklarira varijablu statičkog niza
Zatamni iCount kao cijeli broj
Za iCount = 1 do ThisWorkbook.Sheets.Count
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Naziv
Debug.Print MyNames (iCount)
Sljedeći iCount
Erase MyNames () 'briše sadržaj varijable, oslobađa malo memorije
Kraj podm

Dekodiranje

Dim MyNames (1 do 10) kao niz

Imamo dimenzioniranje jednog promjenjivog MyNames-a kao stringa, koji može sadržavati 10 stavki u njemu. Dakle, MyNames veriable je tip niza.

Zatamni iCount kao cijeli broj

Deklarirali smo jednu varijablu iCount kao cijeli broj, koji može sadržavati samo vrijednost numeričkog cijelog broja

Za iCount = 1 do ThisWorkbook.Sheets.Count

ThisWorkbook.Sheets.Count će nam dati broj listova u radnoj knjizi. Ova radna knjiga odnosi se na radnu knjigu u kojoj je napisan kôd.

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

Koristeći petlju, svakom listu dodjeljujemo jednu promjenjivu pod nazivom Moja imena. MyNames je promjenjiv tip polja, pa će pohraniti svaki naziv lista u svaku stavku niza.

Debug.Print MyNames (iCount)

Odmah nakon dodjeljivanja vrijednosti svakoj stavci niza, ista će se ispisati u ImmediateWindow, prema zadanim postavkama na dnu prozora VBA. Možete vidjeti dodjelu svake vrijednosti i prikazati njezinu vrijednost u programu ImmediateWindow.

Sljedeći iCount

Sljedeći se koristi za reći For Loop u Excelu VBA, da ponovi isti zadatak, povećavajući brojač iCount, sve dok iCount ne dosegne ukupni broj listova, u radnoj knjizi.

Varijable dinamičkog niza

Varijable dinamičkog niza korisne su ako unaprijed ne znate o koliko elemenata trebate pohraniti podatke.

Deklarirate varijable dinamičkog niza baš kao i varijablu statičkog niza, osim što ne dajete nikakve podatke o veličini polja.

U gornjem primjeru (Dim MyNames (1 do 10) kao niz) ako je broj listova veći od 10, to će se dogoditi zbog greške, jer MyNames neće moći pohraniti više od 10 stavki.

Kodirati

Pod testDynamicArray ()
'sprema sva imena u radnu knjigu u varijablu polja MyNames ()
Dim MyNames () As String 'deklarira varijablu dinamičkog niza
Zatamni iCount kao cijeli broj
Dim Max kao cijeli broj
Max = ThisWorkbook.Sheets.Count 'pronalazi najveću veličinu polja
ReDim MyNames (1 To Max) 'deklarira varijablu niza s potrebnom veličinom
Za iCount = 1 do maks
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Naziv
MsgBox Moja imena (iCount)
Sljedeći iCount
Erase MyNames () 'briše promjenjivi sadržaj, oslobađa malo memorije
Kraj podm

Dekodiranje

Dim MyNames () Kao String

Imamo dimenzioniranje jednog promjenjivog MyNames-a kao niza, koji je tip niza, zbog otvaranja i zatvaranja paranteze, nakon naziva koji se može mijenjati, ali nećemo moći pohraniti nikakve podatke u njega jer nismo dali njegov gornji nivo.

ReDim MyNames (1 do maks.)

Redim se koristi za ponovno dimenzioniranje niza. Sada će mu se dodijeliti gornja razina varijable tipa niza.

U ovom slučaju, ukupan broj listova u radnoj knjizi (Max = ThisWorkbook.Sheets.Count)

MsgBox Moja imena (iCount)

U posljednjem primjeru smo ispisali vrijednost u varijablama u neposrednom prozoru, ovaj put vrijednost ispisujemo u MessageBoxu, koji će se pojaviti ovako …

Ako znate da će vam trebati varijabla niza s 1000 stavki, upotrijebite statičku varijablu. Nedostatak je to što ćete svaki put koristiti memoriju za 1000 stavki, također u slučajevima kada pohranjujete samo podatke o 10 stavki. Ako koristite varijablu dinamičkog niza, memoriju ćete koristiti učinkovitije.

Ponekad nije moguće izračunati koliko će velika varijabla polja morati biti velika. U tim slučajevima veličinu varijable niza potrebno je povećati prema potrebi. Kada koristite a ReDim-izjava za promjenu veličine varijable niza, sadržaj varijable se također briše kako bi se izbjeglo brisanje sadržaja varijable kada Redim varijabla polja koju ćete morati koristiti Rezervat ReDim-izjava.

Kodirati

Sub GetFileNameList ()
'sprema sve nazive datoteka u trenutnu mapu
Dim FolderFiles () As String 'deklarira varijablu dinamičkog niza
Dim tmp kao niz, fCount kao cijeli broj
fCount = 0
tmp = Dir ("D: \ Test \*.*")
Dok je tmp Prazan
fCount = fCount + 1
ReDim Preserve FolderFiles (1 do fCount)
'ponovno deklarira varijablu niza (veličina+1)
FolderFiles (fCount) = tmp
tmp = Dir
lužički Srbin
MsgBox fCount & "imena datoteka nalaze se u mapi" & CurDir
Erase FolderFiles 'briše promjenjivi sadržaj i oslobađa malo memorije
Kraj podm

Dekodiranje

Dim FolderFiles () Kao niz

Imamo dimenzioniranje jedne promjenjive datoteke mape kao niz, koji je tip niza, zbog otvaranja i zatvaranja paranteze, nakon naziva koji se može mijenjati, ali nećemo moći pohraniti nikakve podatke u nju jer nismo dali njenu gornju razinu.

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

Naredba Dir radi kao istraživač, koji može sadržavati naziv svih datoteka i mapa u direktoriju. Također možete ograničiti sve datoteke na neke posebne kriterije. Dir ("D: \ Test \*. Pdf") će ograničiti sve datoteke samo na PDF datoteke ili proširenje.

Dok je tmp Prazan

Umjesto For petlje u Excelu VBA, ovaj put ponavljamo istu radnju, koristeći Excel VBA WHILE LOOP, gdje su kriteriji za prekid petlje postavljeni kao tmp, a ne jednaki praznom. Dakle, sve dok nije bilo vrijednosti u tmp promjenjivoj, petlja će raditi.

ReDim Preserve FolderFiles (1 do fCount)

Mape s promjenjivim nizom nemaju gornju razinu u početnom položaju. No, u svakom ponavljanju povećat će svoju gornju razinu naredbom ReDim. U prvom izvođenju 1, zatim 2 … i tako dalje, do fCount. Međutim, sa svakim povećanjem gornje razine, izgubit će se sve već dodijeljene varijable. Pomoću naredbe Preserve možemo zadržati ili pohraniti već dodijeljenu vrijednost.

lužički Srbin

Wend je znao reći For Loops u VBA -i, da ponovi isti zadatak, sve dok kriteriji ne zadovolje.

MsgBox fCount & "imena datoteka nalaze se u mapi" & CurDir

Pri svakom ponavljanju fcout će se povećavati s +1, a konačna vrijednost bit će broj datoteka pronađenih u tom direktoriju / mapi. Naredba CurDir daje naziv trenutnog direktorija. U ovom slučaju "D: \ Test"