Access

  MS Access 2010+ i Visual Basic for Applications VBA 7.0



• Deklarowanie zmiennych w VBA.

Aby użyć zmiennej w VBA, musimy najpierw ją zadeklarować i określić jaki typ danych chcemy użyć. Aby zadeklarować nową zmienną należy napisać jej nazwę, a następnie określić typu danych np. String, Long, Boolean. Do deklarowania zmiennej zazwyczaj stosowana jest instrukcja Dim.
Po co deklarować zmienne?

  • Zadeklarowane zmienne i określonym typem zmiennej zajmują mniej miejsca w pamięci i kod działa szybciej.
  • Zadeklarowanie wszystkich zmiennych na początku procedury (funkcji) daje bardziej przejrzysty kod, co ułatwia analizowanie kodu szczególnie, gdy nazwy zmiennych są opisowe. Dodatkowo zmienne można opisać za pomocą komentarzy, co ułatwi analizę kodu innym osobom.
  • Deklarowanie zmiennych w połączeniu z poleceniem Option Explicit, które wymusza zadeklarowanie wszystkich używanych zmiennych, zabezpiecza kod przed tzw. literówkami w nazwach zmiennych. Bez tej instrukcji, błędnie wpisana zmienna (tzw. literówką) zostanie zinterpretowana przez kompilator jako nowa zmienna. Więcej o instrukcji Option Explicit na stronie Podstawy 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.

• Instrukcje deklaracji.

Instrukcje deklaracji służą do nadawania nazw i definiowania procedur, funkcji, zmiennych, tablic i stałych. Kiedy deklarowana jest procedura, zmienna lub stała, definiowany jest również jej zakres zależnie od miejsca wystąpienia deklaracji i rodzaju słów kluczowych zastosowanych w deklaracji.
Poniższy przykład zawiera trzy deklaracje:

Sub MojaProcedura()
  Const MojaStala As String = "Mój tekst"
  Dim MojaZmienna As Long
    ' Dalsze instrukcje
  End Sub

• Instrukcja Sub

Instrukcja Sub (wraz z odpowiadającą jej instrukcją End Sub) deklaruje procedurę o nazwie MojaProcedura. Gdy procedura MojaProcedura jest wywoływana lub uruchamiana, wykonywane są wszystkie instrukcje umieszczone między instrukcjami SubEnd Sub.

Procedura Sub jest ciągiem instrukcji języka Visual Basic zawartych między instrukcjami SubEnd Sub. Instrukcje procedury tego typu wykonują akcje, lecz nie zwracają wartości. Procedura Sub może pobierać argumenty, takie jak stałe, zmienne i wyrażenia, które są przekazywane przez procedurę wywołującą. Jeśli procedura Sub nie ma argumentów, instrukcja Sub musi zawierać pustą parę nawiasów.

• Instrukcja Const

Instrukcja Const deklaruje stałą MojaStala, o określonym typie danych String i wartości "Mój tekst".

Poprzez zadeklarowanie stałej możliwe jest nadanie nazwie stałej sensownej nazwy. Do deklaracji stałej i nadania jej wartości służy instrukcja Const. Po zadeklarowaniu stałej nie jest możliwe jej modyfikowanie lub przypisywanie do niej innej wartości.
Stałą można zadeklarować wewnątrz procedury lub na początku modułu, w sekcji deklaracji. Stałe zadeklarowane na poziomie modułu są domyślnie prywatne. Aby zadeklarować publiczną stałą na poziomie modułu, należy poprzedzić instrukcję Const słowem kluczowym Public. Możliwe jest także jawne zadeklarowanie stałej prywatnej, przez poprzedzenie instrukcji Const słowem kluczowym Private, co ułatwia czytanie i interpretowanie kodu programu.

• Instrukcja Dim

Instrukcja Dim deklaruje zmienną MojaZmienna o określonym typie danych Long.

Instrukcje Dim są jednym z typów instrukcji stosowanych do deklarowania zmiennych. Inne słowa kluczowe stosowane w takich deklaracjach to ReDim, Static, Public, PrivateConst.
Zmienna może być także zadeklarowana jako obiekt dowolnego typu, udostępnianego przez wykorzystywaną aplikację.

Do deklarowania zmiennej zazwyczaj stosowana jest instrukcja Dim. Instrukcja deklaracji może być umieszczona wewnątrz procedury wówczas zostanie utworzona zmienna na poziomie procedury. Jeżeli natomiast deklaracja zostanie umieszczona na początku modułu, w sekcji deklaracji, utworzona będzie zmienna na poziomie modułu.
Poniższy przykład tworzy zmienną strNazwa i określa typ danych String.

Dim strMojaZmienna As String

Jeśli instrukcja ta występuje wewnątrz procedury, zmienna strMojaZmienna może być używana tylko w tej procedurze.
Jeśli natomiast instrukcja zostanie umieszczona w sekcji deklaracji modułu, zmienna strMojaZmienna będzie dostępna dla wszystkich procedur wewnątrz modułu, lecz nie mogą korzystać z niej procedury w innych modułach projektu. Aby udostępnić tę zmienną wszystkim modułom projektu, należy zadeklarować ją w module standardowym i poprzedzić instrukcją Public:

Public Dim strMojaZmienna As String

Zmienne mogą być deklarowane w jednym z następujących typów danych: Boolean, Byte, Integer, Long, Currency, Single, Double, Date, String (dla ciągów o zmiennej długości), String * długość (dla ciągów o stałej długości), Object lub Variant. Jeśli typ danych nie zostanie określony, przyjmowany jest domyślnie typ Variant.
Począwszy od MS Aceess 2010 wraz z wprowadzeniem VBA7, pojawiły się dwa nowe typy: LongPtr (32 i 64-bitowe środowisko VBA7) i LongLong (wyłącznie 64-bitowe środowisko VBA7).

W jednej instrukcji można zadeklarować kilka zmiennych. Aby określić typ danych, należy dla każdej zmiennej podać określenie typu danych. W poniższej instrukcji wszystkie zmienne intX, intYintZ są zadeklarowane jako zmienne typu Integer.

Public Dim intX As Integer, intY As Integer, intZ As Integer

W poniższej instrukcji zmienna intX i zmienna intY są zadeklarowane domyślnie jako zmienne typu Variant, gdyż nie przypisano im bezpośrednio, za pomocą słowa kluczowego As, typu zmiennej. Jedynie zmienna intZ jest typu Integer.

UWAGA!
Jeśli typ danych nie zostanie określony, przyjmowany jest domyślnie typ Variant.

Public Dim intX, intY, intZ As Integer
' Zmienna intX i zmienna intY są zadeklarowane domyślnie jako zmienne typu Variant

• Instrukcja Public

Instrukcja Public może być stosowana do deklarowania zmiennych publicznych na poziomie modułu w sekcji deklaracji.

Public strMojaZmienna As String

Zmienne publiczne mogą być używane w dowolnych procedurach projektu. Jeśli zmienna publiczna jest zadeklarowana w module standardowym lub module klasy, może być także stosowana w dowolnym projekcie, który odwołuje się do projektu, w którym zadeklarowano tę zmienną publiczną.

• Instrukcja Private

Instrukcja Private może być stosowana do deklarowania zmiennych prywatnych na poziomie modułu w sekcji deklaracji.

Private strMojaZmienna As String

Zmienne prywatne mogą być używane tylko przez procedury w tym samym module.
Na poziomie modułu instrukcja Dim jest równoważna instrukcji Private. Instrukcja Private może być stosowana w celu uzyskania bardziej czytelnego i łatwiejszego do interpretacji kodu programu.

• Instrukcja Static

Jeśli zamiast instrukcji Dim zostanie użyta instrukcja Static, zadeklarowana w ten sposób zmienna zachowuje swoją wartość między wywołaniami funkcji.

• Instrukcja Option Explicit

Zmienna w języku Visual Basic może być niejawnie zadeklarowana po prostu przez użycie jej w instrukcji podstawienia. Wszystkie zmienne zadeklarowane niejawnie są typu Variant. Zmienne typu Variant wymagają więcej zasobów pamięci niż większość innych zmiennych. Jeżeli zmienne deklarowane są jawnie, z określonym typem danych, aplikacja użytkownika jest bardziej efektywna. Jawne deklarowanie wszystkich zmiennych redukuje niebezpieczeństwo wystąpienia błędów wynikających z konfliktów nazw i pomyłek w pisowni. Jeśli niejawne deklaracje zmiennych dokonywane przez system Visual Basic są niepożądane, w module przed wszystkimi procedurami należy umieścić instrukcję Option Explicit. Instrukcja ta nakłada wymóg, aby wszystkie zmienne w module były jawnie deklarowane. Jeśli w module umieszczono instrukcję Option Explicit, znalezienie przez kompilator Visual Basic w kodzie programu zmiennej, która nie została uprzednio zadeklarowana lub której nazwę napisano błędnie, powoduje wystąpienie błędu czasu kompilacji.
W celu automatycznego włączania instrukcji Option Explicit we wszystkich nowych modułach należy ustawić odpowiednią opcję środowiska programistycznego Visual Basic. Należy jednak zwrócić uwagę, że opcja ta nie zmienia już napisanego, istniejącego kodu programu.

Uwaga
Tablice o stałym rozmiarze i tablice dynamiczne wymagają jawnych deklaracji.

• Deklarowanie zmiennej obiektowej dla automatyzacji

Jeżeli jedna aplikacja jest wykorzystywana do manipulowania obiektami innej aplikacji, należy ustawić odwołanie do biblioteki typów tej innej aplikacji. Po ustawieniu odwołania można zadeklarować zmienną obiektową o typach najbardziej odpowiadających typom obiektów. Na przykład, jeśli podczas sesji z programem Microsoft Access ustawiono odwołanie do biblioteki typów programu Microsoft Excel, możliwe jest zadeklarowanie z poziomu programu Microsoft Access zmiennej typu Worksheet, aby reprezentować nią obiekt typu Worksheet programu Microsoft Excel.

Jeżeli inna aplikacja operuje na obiektach programu Microsoft Access, w większości przypadków możliwe jest deklarowanie zmiennych obiektowych o możliwie najbardziej odpowiednich typach. Można także użyć słowa kluczowego New, aby automatycznie utworzyć nowe wystąpienie obiektu. Konieczne jednak może się okazać wskazanie, że jest to obiekt programu Microsoft Access. Na przykład, deklarując zmienną obiektową służącą do reprezentowania formularza programu Microsoft Access z poziomu systemu Microsoft Visual Basic, należy rozróżnić obiekt typu Form programu Microsoft Access od obiektu typu Form języka Visual Basic. W tym celu należy w deklaracji zmiennej dołączyć nazwę biblioteki typów,] jak w poniższym przykładzie:

Dim frmMojFormularz As New Access.Form

Niektóre aplikacje nie rozpoznają poszczególnych typów danych programu Microsoft Access. Dla takich aplikacji, pomimo ustawienia odwołania do biblioteki typów programu Microsoft Access, konieczne jest deklarowanie wszystkich zmiennych obiektowych programu Microsoft Access jako zmiennych typu Object. Nie można też stosować słowa kluczowego New do tworzenia nowego wystąpienia obiektu.

Poniższy przykład pokazuje, w jaki sposób należy zadeklarować zmienną reprezentującą wystąpienie obiektu programu Microsoft Access typu Application z poziomu aplikacji, która nie rozpoznaje typów obiektowych programu Microsoft Access. Następnie aplikacja tworzy wystąpienie obiektu typu Application.

Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")

Aby określić, jaką składnię udostępnia aplikacja, należy zapoznać się z dokumentacją aplikacji.