Access

  MS Access 2010+ i Visual Basic for Applications VBA 7.0



• Zmienna w VBA.

Podstawowym sposobem przechowywania danych w trakcie działania programu, jest zapisywanie danych w pamięci głównej. Aby wiedzieć gdzie dana informacja znajduję się w pamięci, należy zaadresować ten fragment pamięci i go nazwać. Tak zidentyfikowana część pamięci mająca swoją nazwę oraz określoną wielkość nazywa się zmienną. Dostęp do tego zaadresowanego obszaru, w którym przechowujemy pewną wartość, mamy poprzez nazwę zmiennej Dane zapisywane są w pamięci w sposób dynamiczny, tzn. stara wartość zmiennej zostaje nadpisana przez nową wartość. Zmienną można wykorzystać do przechowywania wyniku obliczeń, albo za jej pomocą udostępnić wartość zmiennej innej procedurze w celu dalszego przetwarzania.

• Zasady nadawania nazw zmiennym, procedurom, stałym, i argumentom

  • Przy nadawaniu nazw procedurom, stałym, zmiennym i argumentom w module programu pisanego w języku Visual Basic należy stosować następujące zasady:
  • Pierwszym znakiem nazwy musi być literą,
  • Nie należy używać w nazwie znaków spacji, kropki (.), wykrzyknika (!) i znaków @, &, $, #,
  • Długość nazwy nie może przekroczyć 255 znaków,
  • Ogólnie, nie należy stosować nazw takich samych jak nazwy procedur typu Function, instrukcjimetod języka Visual Basic. Powoduje to bowiem przesłanianie odpowiadających im słów kluczowych języka. Aby wykorzystać wbudowaną funkcję, instrukcję lub metodę języka, która jest w konflikcie z nadaną nazwą, należy ją jawnie zidentyfikować. Nazwę wbudowanej funkcji, instrukcji lub metody należy poprzedzić nazwą związanej z nią biblioteki typów
    Na przykład, jeśli w kodzie programu zadeklarowano zmienną o nazwie Left, funkcja wbudowana Left może być wywołana tylko z wykorzystaniem konstrukcji VBA.Left,
  • Nie można powtarzać nazw wewnątrz tego samego poziomu zakresu. Na przykład, nie można zadeklarować dwóch zmiennych o MojaZmienna w tej samej procedurze. Można jednak zadeklarować zmienną prywatną o nazwie MojaZmienna oraz zmienną o nazwie MojaZmienna na poziomie procedury w tym samym module,

  • Uwaga! Język Visual Basic nie uwzględnia wielkości liter, jednak zachowuje ich wielkość występującą w instrukcji, w której deklarowana jest nazwa.

• Deklarowanie zmiennych

Aby jawnie zadeklarować zmienną, należy skorzystać z instrukcji Dim, która to deklaruje zmienną i przydziela pamięć. W instrukcji tej należy podać nazwę deklarowanej zmiennej. Składnia instrukcji Dim wygląda następująco:

Dim [WithEvents] nazwa_zmiennej [([indeksy])] [As [New] typ] [, [WithEvents] nazwa_zmiennej [([indeksy])] [As [New] typ]] . . .
Dim [NazwaZmiennej] [As [typ]]

Zmienne zadeklarowane za pomocą instrukcji Dim na poziomie modułu są dostępne we wszystkich procedurach wewnątrz modułu. Na poziomie procedury, zmienne dostępne są tylko wewnątrz procedury. Aby zadeklarować typ zmiennej, należy wykorzystać instrukcję Dim na poziomie modułu lub procedury. Na przykład, poniższa instrukcja deklaruje zmienną typu Integer:

Dim Moja_Liczba As Integer

Instrukcję Dim można wykorzystać do zadeklarowania zmiennej obiektowej. Poniższa instrukcja deklaruje zmienną dla nowego wystąpienia formularza:

Dim MojaZmienna As Form_NazwaFormularza

Jeżeli przy deklaracji zmiennej obiektowej pominięto słowo kluczowe New, zmienna odwołująca się do obiektu musi zostać przed użyciem przypisana do istniejącego obiektu za pomocą instrukcji Set.

Dim MojaZmienna As Form
Set X = Form_NazwaFormularza

Zanim zadeklarowana zmienna zostanie przypisana do obiektu, przyjmuje wartość specjalną Nothing, co oznacza, że zmienna nie odwołuje się do żadnego określonego wystąpienia obiektu.

Instrukcję Dim z pustymi nawiasami można wykorzystać do deklaracji tablicy dynamicznej. Po zadeklarowaniu takiej tablicy, do określenia liczby wymiarów i liczby elementów tablicy należy wewnątrz procedury użyć instrukcji ReDim.

Dim MojaTablica() As String
ReDim MojaTablica(0 To 9)

Przy próbie ponownej deklaracji wymiaru tablicy o rozmiarze jawnie zadeklarowanym za pomocą instrukcji Private, Public lub Dim podczas kompilacji wystąpi błąd:

Dim MojaTablica(0 To 9) As String
ReDim MojaTablica(0 To 19) As String

Access
„Tablica jest już zwymiarowana”.

Jeżeli nie zostanie określony typ danych lub typ obiektu, a w module nie występuje również instrukcja Deftype, jako domyślny przyjmowany jest typ Variant. Podczas inicjowania zmiennych zmienna numeryczna przyjmuje wartość 0, ciąg o zmiennej długości przyjmuje wartość ciągu o długości zerowej (""), a ciąg o stałej długości jest wypełniany zerami (nie zerami "matematycznymi"), a znakami vbNullChar. Zmienne typu Variant są inicjowane wartością Empty. Każdy element zmiennej typu zdefiniowanego przez użytkownika jest inicjowany tak, jakby był oddzielną zmienną.

Uwaga! Jeżeli instrukcja Dim występuje w procedurze, zwykle umieszczana jest na początku procedury.

• Typy zmiennych

Typ zmiennejRozmiarZakres
Byte1 bajtLiczba z zakresu od 0 do 255
Boolean2 bajtyTrue lub False (Prawda/Fałsz)
Integer
(dwubajtowa liczba całkowita)
2 bajtyOd –32 768 do 32 767
Long
(czterobajtowa liczba całkowita)
4 bajtówOd –2 147 483 648 do 2 147 483 647
LongLong
(ośmiobajtowa liczba całkowita)
8 bajtówOd -9 223 372 036 854 775 808
do 9 223 372 036 854 775 807
(tylko 64-bitowe środowisko)
LongPtr
(czterobajtowa liczba całkowita typu Long w 32-bitowym środowisku, ośmiobajtowa liczba całkowita typu LongLong w 64-bitowym środowisku)
4 bajty w 32-bitowym środowisku,
8 bajtów w 64-bitowym środowisku
Od -2 147 483 648 do 2 147 483 647 w 32-bitowym środowisku,
od -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 w 64-bitowym środowisku.
LongPtr nie jest prawdziwym typem danych. W środowisku 32-bitowym przyjmuje typ Long, a w środowisku 64-bitowym przyjmuje typ LongLong. Typ ten jest zalecany przy deklarowaniu wskaźników i uchwytów, zarówno w środowisku 32-bitowym jak i 64-bitowym, co umożliwia pisanie przenośnego kodu, który można uruchomić w zarówno 32-bitowym i 64-bitowym środowisku.
Single
(liczba zmiennoprzecinkowa pojedynczej precyzji)
4 bajtyOd –3,402823E38 do –1,401298E–45 dla wartości ujemnych
i od 1,401298E–45 do 3,402823E38 dla wartości dodatnich
Double
(liczba zmiennoprzecinkowa podwójnej precyzji)
8 bajtów Od –1,79769313486231E+308 do –4,94065645841247E–324 dla wartości ujemnych
i od 4,94065645841247E–324 do 1,79769313486232E+308 dla wartości dodatnich
Currency
(Liczba ośmiobajtowa, stała)
8 bajtów Od –922 337 203 685 477,5808 do 922 337 203 685 477,5807 dokładność zapisu - cztery miejsca po przecinku
Decimal14 bajtów Od +/–79 228 162 514 264 337 593 543 950 335 (liczby całkowite),
+/–7,9228162514264337593543950335 (wartości ułamkowe z 28 cyframi znaczącymi) - najmniejsza wartość niezerowa to +/–0,0000000000000000000000000001
Date8 bajtówOd 1 stycznia 100 roku do 31 grudnia 9999 roku
Object4 bytesReferencja (odwołanie) do obiektu
String
(zmienna długość)
10 bajtów plus długość ciągu Od 0 do około 2 000 000 000 znaków.
Zależy od rozmiaru danych
String
(stała długość)
Liczba znakówOd 1 do około 65 400 znaków
Variant
(dla liczb)
16 bajtówDowolna wartość liczbowa mieszcząca się w zakresie typu Double
Variant
(dla ciągu znaków)
22 bajty + długość ciągu znaków (24 bajtów w 64-bitowym systemie) Od 0 do około 2 000 000 000 znaków. Zależy od rozmiaru danych. Tak samo jak typ String zmiennej długości
User Type
(typ użytkownika zdefiniowany za pomocą struktury Type)
Wielkość wymagana przez składowe elementy Wielkość każdego element jest taka sama jak wielkość jego typu
(*)Tablice
W środowisku 32-bitowym tablica każdego typu danych wymaga 20 bajtów pamięci, plus 4 bajty na każdy wymiar tablicy, plus liczba bajtów zajmowanych przez dane.
W środowisku 64-bitowym 24 bajty, ponieważ wskaźnk pvData w strukturze SAFEARRAY jest typu LonLong, plus 8 bajtów na każdy wymiar tablicy, plus liczba bajtów zajmowanych przez dane.

Zmienna typu Variant zawierająca tablicę wymaga 12 bajtów więcej niż tablica określonego typu.