Zmienne tablicowe za pomocą VBA w Microsoft Excel 2010

Spisie treści:

Anonim

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”