Jak korzystać z tablicy Excel VBA?
Makra można uruchomić z Edytora Visual Basic, umieszczając kursor w makrze i naciskając klawisz F5, lub z programu Excel, otwierając okno dialogowe Makra (ALT+F8), wybierając makro do uruchomienia i klikając opcję Uruchom. Najlepiej uruchamiać te makra z Edytora Visual Basic za pomocą Debuguj > Przejdź do (naciskając F8) dzięki czemu możesz je oglądać podczas pracy. Instrukcja Jeśli karta Deweloper nie znajduje się na Wstążce…
- Otwórz Excela.
- Przejdź do edytora VBA (naciśnij Alt + F11)
- Przejdź do okna bezpośredniego. ( Ctrl + G)
- Napisz poniżej Kod.
- Application.ShowDevTools = Prawda
Jak wstawić kod VBA w programie Excel
- Iść do Deweloper Karta > Kod Grupa > Visual Basic
- Kliknij Wstawić > Moduł.
- Otworzy dla ciebie pusty moduł.
- Napisz / wklej dostarczony kod w tym module
Jak uruchomić kod VBA w programie Excel
- Wybierz dowolne miejsce pomiędzy Kodeksem, Sub… Koniec Sub
- Kliknij Uruchom i Uruchom sub lub F5
Statyczne zmienne tablicowe
Zamiast używać kilku unikalnych zmiennych do przechowywania informacji, możesz użyć zmiennej tablicowej.
Kiedy wiesz, ile elementów musisz przechowywać w tablicy, możesz użyć statycznej zmiennej tablicowej w następujący sposób:
Kod
Podtestowa tablica statyczna()
' przechowuje 10 nazw w skoroszycie w zmiennej tablicowej MyNames()
Dim MyNames(1 do 10) As String ' deklaruje statyczną zmienną tablicową
Dim iCount jako liczba całkowita
For iCount = 1 To ThisWorkbook.Sheets.Count
MyNames(iCount) = ThisWorkbook.Sheets(iCount).Name
Debug.Print MyNames(iCount)
Następny iCount
Erase MyNames() ' usuwa zawartość zmiennej, zwalnia trochę pamięci
Napis końcowy
Rozszyfrować
Dim MyNames(1 do 10) As String
Mamy zwymiarować pojedynczy werbalny MyNames jako String, który może pomieścić 10 pozycji w nim. Więc MyNames veriable jest typem Array.
Dim iCount jako liczba całkowita
Zadeklarowaliśmy pojedynczą zmienną iCount jako Integer, która może zawierać tylko typ Numeric Integer Value
For iCount = 1 To ThisWorkbook.Sheets.Count
ThisWorkbook.Sheets.Count da nam liczbę arkuszy w skoroszycie. ThisWorkbook, odnosi się do skoroszytu, w którym napisano kod.
MyNames(iCount) = ThisWorkbook.Sheets(iCount).Name
Za pomocą pętli przypisujemy nazwę każdego arkusza do jednej zmiennej o nazwie MyNames. MyNames jest zmienną typu Array, więc będzie przechowywać nazwę każdego arkusza w każdym elemencie tablicy.
Debug.Print MyNames(iCount)
Zaraz po przypisaniu wartości do każdego elementu tablicy, wyświetli to samo w ImmediateWindow, domyślnie na dole okna VBA. Możesz wyświetlić przypisanie każdej wartości i wyświetlić jej wartość w ImmediateWindow.
Następny iCount
Następnie służy do powiedzenia For Loop w Excel VBA, aby ponownie powtórzył to samo zadanie, zwiększając licznik iCount, aż iCount osiągnie całkowitą liczbę arkuszy w skoroszycie.
Dynamiczne zmienne tablicowe
Dynamiczne zmienne tablicowe są przydatne, gdy z góry nie wiesz, ile elementów musisz przechowywać informacje.
Dynamiczne zmienne tablicowe deklarujesz tak samo jak statyczną zmienną tablicową, z wyjątkiem tego, że nie podajesz żadnych informacji o rozmiarze tablicy.
W powyższym przykładzie (Dim MyNames (1 do 10) As String) jeśli liczba arkuszy jest większa niż 10, wystąpi błąd, ponieważ MyNames nie będzie w stanie przechowywać więcej niż 10 pozycji.
Kod
Podtest tablica dynamiczna()
' przechowuje wszystkie nazwy ze skoroszytu w zmiennej tablicowej MyNames()
Dim MyNames() As String ' deklaruje dynamiczną zmienną tablicową
Dim iCount jako liczba całkowita
Dim Max jako liczba całkowita
Max = ThisWorkbook.Sheets.Count ' znajduje maksymalny rozmiar tablicy
ReDim MyNames(1 To Max) ' deklaruje zmienną tablicową o wymaganym rozmiarze
Dla iCount = 1 do maks.
MyNames(iCount) = ThisWorkbook.Sheets(iCount).Name
MsgBox Moje imiona (iCount)
Następny iCount
Erase MyNames() ' usuwa zawartość zmiennej, zwalnia trochę pamięci
Napis końcowy
Rozszyfrować
Dim MyNames() jako ciąg
Zwymiarowaliśmy pojedynczą weryfikalną MyNames jako String, która jest typem Array, ze względu na open & close Paranthesis, po prawdziwej nazwie, ale nie będziemy w stanie przechowywać w niej żadnych danych, ponieważ nie podaliśmy jej UpperLevel.
Zmień moje nazwy (1 do maks.)
Redim służy do ponownego wymiarowania tablicy. Teraz przypisze górny poziom zmiennej typu tablicy.
W tym przypadku całkowita liczba arkuszy w skoroszycie (Max = ThisWorkbook.Sheets.Count)
MsgBox Moje imiona (iCount)
W ostatnim przykładzie wydrukowaliśmy wartość w zmiennych w bezpośrednim oknie, tym razem wyświetlamy wartość w MessageBox, który będzie wyglądał tak…
Jeśli wiesz, że będziesz potrzebować zmiennej tablicowej zawierającej 1000 elementów, użyj zmiennej statycznej. Minusem jest to, że za każdym razem będziesz używać pamięci na 1000 pozycji, również w przypadkach, gdy przechowujesz tylko informacje o 10 pozycjach. Jeśli używasz dynamicznej zmiennej tablicowej, użyjesz pamięci bardziej wydajnie.
Czasami nie jest możliwe obliczenie, jak duża będzie potrzebna zmienna tablicowa. W takich przypadkach wielkość zmiennej tablicowej należy w razie potrzeby zwiększyć. Kiedy używasz ReDim- instrukcja do zmiany rozmiaru zmiennej tablicy, zawartość zmiennej jest również usuwana, aby uniknąć usunięcia zawartości zmiennej, gdy Redim zmienna tablicowa, której będziesz potrzebować, aby użyć ReDim Zachowaj-oświadczenie.
Kod
Sub GetFileNameList()
' przechowuje wszystkie nazwy plików w bieżącym folderze
Dim FolderFiles() As String ' deklaruje dynamiczną zmienną tablicową
Dim tmp As String, fCount As Integer
fCount = 0
tmp = katalog("D:\Test\*.*")
Gdy tmp jest pusty
fCount = fCount + 1
Redim Zachowaj FolderFiles (1 do fCount)
' ponownie deklaruje zmienną tablicową (rozmiar+1)
FolderFiles(fCount) = tmp
tmp = Kierunek
Wend
MsgBox fCount i " nazwy plików znajdują się w folderze " & CurDir
Erase FolderFiles 'usuwa zmienną zawartość, zwalnia trochę pamięci
Napis końcowy
Rozszyfrować
Dim FolderFiles() jako ciąg
Zwymiarowaliśmy pojedynczy możliwy FolderFiles jako String, który jest typem Array, ze względu na otwieranie i zamykanie Paranthesis, po prawdziwej nazwie, ale nie będziemy w stanie przechowywać w nim żadnych danych, ponieważ nie podaliśmy jego UpperLevel.
tmp = katalog("D:\Test\*.*")
Polecenie Dir działa jako eksplorator, który może przechowywać nazwy wszystkich plików i folderów w katalogu. Możesz również ograniczyć wszystkie pliki do określonych kryteriów. Dir("D:\Test\*.pdf") ograniczy wszystkie pliki tylko do plików PDF lub rozszerzeń.
Gdy tmp jest pusty
Zamiast pętli For w Excel VBA, tym razem powtarzamy tę samą akcję, używając Excel VBA WHILE LOOP, gdzie kryterium zakończenia pętli zostało ustawione jako tmp nie równe pustym. Tak więc, dopóki w tmp nie będzie żadnej wartości, pętla będzie działać.
ReDim Zachowaj folderPliki (1 do fCount)
Array Veriable FolderFiles nie ma żadnego górnego poziomu w pozycji początkowej. Ale w każdym powtórzeniu zwiększy swój górny poziom za pomocą polecenia ReDim. W pierwszym przebiegu 1, potem 2… i tak dalej, aż do fCount. Jednak przy każdym zwiększeniu górnego poziomu straci wszystkie już przypisane zmienne. Za pomocą polecenia Zachowaj możemy zatrzymać lub zapisać już przypisaną wartość.
Wend
Wend zwykł mówić For Loops w VBA, aby powtórzyć to samo zadanie, dopóki kryteria nie zostaną spełnione.
MsgBox fCount i " nazwy plików znajdują się w folderze " & CurDir
Przy każdym powtórzeniu fcout zwiększy się o +1, a jego ostateczna wartość będzie liczbą plików znalezionych w tym katalogu/folderze. Polecenie CurDir podaje nazwę bieżącego katalogu. W tym przypadku „D:\Test”