Access

  MS Access 2010+  |  Aplication Programming Interface API  |   VBA 7.0



• Type - instrukcja

Instrukcja wykorzystywana na poziomie modułu, w sekcji deklaracji, do definiowania niestandardowego typu danych, zawierającego jeden lub więcej elementów.

• Składnia instrukcji Type

Składnia
[Private | Public] Type nazwa_zmiennej
   nazwa_elementu [([indeksy])] As typ
   [nazwa_elementu[([indeksy])] As typ]
   . . .
End Type

Składnia instrukcji Type zawiera następujące elementy:

  Element    Opis
PublicElement nieobowiązkowy. Wykorzystywany do deklarowania typów zdefiniowanych przez użytkownika dostępnych we wszystkich procedurach we wszystkich modułach wszystkich projektów.
PrivateElement nieobowiązkowy. Wykorzystywany do deklarowania typu definiowanego przez użytkownika dostępnego tylko wewnątrz modułu, w którym wystąpiła deklaracja.
nazwa_zmiennejElement obowiązkowy. Nazwa typu definiowanego przez użytkownika, podana zgodnie ze standardowymi konwencjami nazewnictwa zmiennych.
nazwa elementuElement obowiązkowy. Nazwa elementu typu definiowanego przez użytkownika. Nazwy elementów muszą być również zgodne ze standardowymi konwencjami nazewnictwa zmiennych, z wyjątkiem możliwości użycia tu słowa kluczowego.
indeksyindeksy Element nieobowiązkowy. Wymiary elementu będącego tablicą. Do deklaracji tablicy, której rozmiar może się zmieniać, należy użyć samych nawiasów. Argument indeksy ma następującą składnię:
[indeks_dolny To] indeks_górny [, [indeks_dolny To] indeks_górny] . . .

Jeżeli element indeks_dolny nie określa tego jawnie, zakres indeksów tablicy jest ograniczany od dołu przez instrukcję Option Base. Jeżeli instrukcja Option Base nie występuje, to dolne ograniczenie zakresu indeksów tablicy wynosi zero.
typElement obowiązkowy. Typ elementu, mogący przyjąć następujące postaci: Byte, Boolean, Integer, Long, LongPtr, LongLong, Currency, Single, Double, Decimal (obecnie nie obsługiwany),Date, String (dla ciągów o zmiennej długości), String * długość (dla ciągów o stałej długości), Obiekt, Variant, inny typ zdefiniowany przez użytkownika lub typ obiektu.

Użycie

Instrukcja Type może być stosowana tylko na poziomie modułu. Po zadeklarowaniu typu definiowanego przez użytkownika za pomocą instrukcji Type, zmienną tego typu można zadeklarować w dowolnym miejscu zakresu deklaracji. Aby zadeklarować zmienną typu zdefiniowanego przez użytkownika, należy użyć instrukcji Dim, Private, Public, ReDim lub Static.

modułach standardowych, typy zdefiniowane przez użytkownika są domyślnie publiczne. Zakres widoczności można zmienić za pomocą słowa kluczowego Private. Jednak w modułach klas typy zdefiniowane przez użytkownika mogą być tylko prywatne i nie można za pomocą słowa kluczowego Public zmienić zakresu ich widoczności.

W blokach ograniczonych instrukcjami Type...End Type stosowanie numerów wierszyetykiet wierszy jest niedozwolone.

Typy zdefiniowane przez użytkownika są często używane w połączeniu z rekordami danych, które składają się z kilku powiązanych ze sobą logicznie elementów różnych typów.

Poniższy przykład ilustruje użycie w typie definiowanym przez użytkownika tablic o stałym rozmiarze:


Type Wojewodztwo
   Kod_miasta (1 To 100) As Integer ' Deklaracja tablicy statycznej.
   Gmina As String * 30
End Type

Dim Warszawskie(1 To 100) As Województwo

W powyższym przykładzie typ Wojewodztwo zawiera tablicę statyczną Kod_miasta, a rekord Warszawskie ma taką samą strukturę jak typ Wojewodztwo.

W deklaracji tablicy o stałym rozmiarze zawartej w deklaracji typu definiowanego przez użytkownika jej wymiary muszą być podane za pomocą literałów numerycznych lub stałych, a nie za pośrednictwem zmiennych.

Ustawienie instrukcji Option Base określa dolne ograniczenie tablic umieszczonych wewnątrz typów zdefiniowanych przez użytkownika.

Instrukcja Type z języka VBA jest zgodna z jej odpowiednikiem w językach C i C++ z instrukcją Struct. Struktury danych są zwykle zbiorem pól przydzielanych w sposób ciągły (jedno za drugim) w pamięci Poniżej przedstawiono trzy najprostsze, ale często stosowane Typy (struktury) w funkcjach API:

Type RECT
   Left As Long
   Top As Long
   Right As Long
   Bottom As Long
End Type

Type POINTAPI
   x As Long
   y As Long
End Type

Type Size
   cx As Long
   cy As Long
End Type

Duża część funkcji API wymaga podania argumentów w postaci Typu (Struktury), a raczej wskaźnika do Typu (struktury) np. lpPoint As POINTAPI, lpRect As RECT, lpSize As SIZE).

Słownik użytych terminów.

• poziom modułu


Opisuje kod programu w sekcji deklaracji modułu. Dowolny kod programu występujący poza procedurą określany jest jako kod programu na poziomie modułu. Deklaracje muszą wystąpić jako pierwsze, po nich następują procedury.
• typ danych
Cecha zmiennej określająca rodzaj danych, jaki ta zmienna może przechowywać. Typami danych są Byte, Boolean, Integer, Long, Currency, Decimal, Single, Double, Date, String, ObjectVariant (domyślny) oraz typy danych zdefiniowane przez użytkownika, jak również konkretne typy obiektów.
• typ zdefiniowany przez użytkownika
Dowolny typ danych zdefiniowany za pomocą instrukcji Type. Typy danych zdefiniowane przez użytkownika mogą zawierać jeden lub więcej elementów dowolnego typu. Tablice typów definiowanych przez użytkownika oraz innych typów tworzone są za pomocą instrukcji Dim. Typy zdefiniowane przez użytkownika mogą zawierać tablice dowolnego typu.
• procedura
Opatrzona nazwą sekwencja instrukcji wykonywanych jako jeden blok. Przykładami procedur są Function, PropertySub. Nazwa procedury jest zawsze definiowana na poziomie modułu. W procedurze musi zawierać się cały wykonywalny kod programu. Procedury nie mogą być zagnieżdżone w innych procedurach.
• moduł
Zestaw deklaracji, po których następują procedury.
• projekt
Zestaw modułów.
• deklaracja
Niewykonywalny kod programu określający nazwę stałej, zmiennej lub procedury i definiujący jej cechy, takie jak typ danych. Dla procedur z bibliotek DLL deklaracje określają nazwy, biblioteki i argumenty.
• zmienna
Opatrzone nazwą miejsce w pamięci do przechowywania danych, które mogą ulegać modyfikacjom w trakcie wykonywania programu. Każda zmienna zaopatrzona jest w unikatową nazwę, która identyfikuje ją w obrębie danego zakresu. Typ danych może być określony lub nie. Nazwy zmiennych muszą zaczynać się literą, muszą być unikatowe w obrębie swego zakresu, nie mogą być dłuższe niż 255 znaków i nie mogą zawierać kropki ani znaku deklarującego typ.
• słowo kluczowe
Słowo lub symbol rozpoznawany jako część języka programowania Visual Basic, na przykład instrukcja, nazwa funkcji lub operator.
• tablica
Zbiór kolejno indeksowanych elementów mających ten sam wewnętrzny typ danych. Każdy element tablicy posiada unikatowy numer indeksu. Przeprowadzenie zmian dla jednego elementu tablicy nie wpływa na inne jej elementy.
• argument
Stała, zmienna lub wyrażenie przekazywane do procedury.
• typ danych Byte
Typ danych używany do przechowywania dodatnich liczb całkowitych z zakresu od 0 do 255. Zmienne typu Byte są przechowywane jako liczby 8-bitowe (1-bajtowe) pojedynczej precyzji, bez znaku.
• typ danych Boolean
Typ danych przyjmujący tylko dwie wartości: True (-1) lub False (0). Zmienne typu Boolean są przechowywane jako liczby 16-bitowe (2-bajtowe).
• typ danych Integer
Typ danych przechowujący zmienne całkowite jako 2-bajtowe liczby z zakresu od -32 768 do 32 767. Typ danych Integer jest także używany do przedstawiania wartości typu wyliczeniowego. W języku Visual Basic znakiem deklaracji typu odpowiadającym typowi Integer jest znak procent (%).
• typ danych Long
Typ danych służący do przechowywania liczb całkowitych na 4 bajtach, o zakresie wartości od -2 147 483 648 do 2 147 483 647. W języku Visual Basic znakiem deklaracji typu odpowiadającym typowi Long jest znak ampersand (&).
• typ danych LongPtr
Typ ten zalecany jest do przechowywania wskaźników i uchwytów, zarówno w środowisku 32-bitowym jak i 64-bitowym środowisku VBA7, co umożliwia pisanie przenośnego kodu, który można uruchomić w zarówno 32-bitowym i 64-bitowym środowisku. LongPtr nie jest prawdziwym typem danych. W środowisku 32-bitowym przyjmuje czterobajtowy typ Long, a w środowisku 64-bitowym przyjmuje ośmiobajtowy typ LongLong.
Zakres wartości: 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.
• typ danych LongLong
Typ danych służący do przechowywania liczb całkowitych na 8 bajtach, o zakresie wartości od -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807. W języku VBA7 znakiem deklaracji typu odpowiadającym typowi LongLong jest znak daszek (^)
• typ danych Currency
Typ danych o zakresie od -922 337 203 685 477,5808 do 922 337 203 685 477,5807. Tego typu danych używa się do obliczeń dotyczących pieniędzy i do obliczeń stałoprzecinkowych, w przypadku których dokładność ma szczególne znaczenie. W języku Visual Basic znakiem deklaracji typu odpowiadającym typowi Currency jest znak @.
• typ danych Single
Typ danych przechowujący zmienne zmiennoprzecinkowe pojedynczej precyzji jako liczby 32-bitowe (2-bajtowe) z zakresu od –3,402823E38 do –1,401298E-45 dla liczb ujemnych i od 1,401298E-45 do 3,402823E38 dla liczb dodatnich. W języku Visual Basic znakiem deklaracji typu odpowiadającym typowi Single jest wykrzyknik (!).
• typ danych Double
Typ danych przechowujący liczby zmiennoprzecinkowe o podwójnej precyzji jako liczby 64-bitowe z zakresu od -1,79769313486232E308 do -4,94065645841247E-324 dla liczb ujemnych oraz od 4,94065645841247E-324 do 1,79769313486232E308 dla liczb dodatnich. W języku Visual Basic znakiem deklaracji typu odpowiadającym typowi Double jest znak numeru (#).
• typ danych Decimal
Typ danych zawierający liczby dziesiętne skalowane przez potęgę liczby 10. Dla liczb skalowanych przez zero, tzn. liczb bez cyfr po przecinku dziesiętnym, zakres wynosi +/-79 228 162 514 264 337 593 543 950 335. Dla liczb z 28 miejscami po przecinku zakres wynosi +/-7,9228162514264337593543950335. Najmniejszą niezerową liczbą, która może być przedstawiona jako liczba typu Decimal jest 0,0000000000000000000000000001.

Warto zwrócić uwagę, że obecnie typ danych Decimal może być używany tylko w obrębie typu Variant. Nie można zadeklarować zmiennej typu Decimal. Można natomiast za pomocą funkcji CDec utworzyć typ Variant o podtypie Decimal.
• typ danych Date
Typ danych używany do przechowywania dat i godzin w postaci liczb rzeczywistych. Zmienne typu Date są przechowywane jako liczby 64-bitowe (8-bajtowe). Wartość na lewo od przecinka dziesiętnego jest odpowiednikiem daty, a wartość na prawo od przecinka — odpowiednikiem godziny.
• typ danych String
Typ danych stanowiący sekwencję następujących po sobie znaków, które interpretowane są jako znaki tekstowe, a nie jako określone wartości numeryczne. Dane typu String mogą zawierać litery, cyfry, spacje i znaki przestankowe. Jako dane typu String można przechowywać ciągi znaków o stałej długości zawierające od 0 do około 63 K znaków oraz ciągi znaków o zmiennej długości zawierające od 0 do około 2 miliardów znaków. W języku Visual Basic znakiem deklaracji typu odpowiadającym typowi String jest znak dolara ($).
• typ danych Variant
Specjalny typ danych, które mogą oprócz danych liczbowych, ciągów znaków lub dat zawierać także wartości specjalne Empty i Null. Typ Variant rezerwuje 16 bajtów na dane numeryczne, co pozwala na przechowywanie liczb o zakresie takim jak dla typu Decimal, lub 22 bajty na ciąg znaków (łącznie z informacją o długości), co pozwala na przechowywanie dowolnego tekstu. Sposób traktowania danych typu Variant określa funkcja VarType. Wszystkie zmienne, dla których nie został jawnie zadeklarowany inny typ danych, należą do typu Variant.
• typ Obiekt
Typ obiektu udostępniony przez aplikację poprzez interfejs automatyzacji, na przykład Application, File, RangeSheet. W celu uzyskania kompletnej listy dostępnych obiektów należy użyć Przeglądarki obiektów lub przejrzeć dokumentację aplikacji.
• zakres
Określa widoczność zmiennej, procedury lub obiektu. Na przykład, zmienna zadeklarowana jako Public jest widoczna dla wszystkich procedur we wszystkich modułach, o ile nie włączono opcji Private Module. Jeżeli opcja Private Module została włączona, dany moduł jest prywatny i w związku z tym nie jest widoczny dla projektów wskazujących go (odwołujących się doń). Zmienne zadeklarowane w danej procedurze są widoczne tylko w ramach tej procedury i, o ile nie zostaną zadeklarowane jako zmienne typu Static, tracą swoją wartość pomiędzy wywołaniami.
• moduł standardowy
Moduł zawierający jedynie deklaracje i definicje procedur, typów i danych. Domyślnie deklaracje i definicje na poziomie modułu standardowego mają status Public. Moduł standardowy w starszych wersjach języka Visual Basic nazywano modułem kodu programu.
• moduł klasy
Moduł zawierający definicję klasy, w tym definicje jej właściwości i metod.
• numer wiersza
Używany do identyfikacji pojedynczego wiersza kodu programu. Numerem wiersza może być dowolna kombinacja cyfr unikatowa w obrębie modułu, w którym została użyta. Numery wierszy muszą rozpoczynać się w pierwszej kolumnie.
• etykieta wiersza
Używana do identyfikacji pojedynczego wiersza kodu programu. Etykietą wiersza może być dowolna kombinacja znaków rozpoczynająca się literą i zakończona dwukropkiem (:). W etykietach wierszy litery małe i wielkie nie są rozróżniane, a etykiety muszą rozpoczynać się w pierwszej kolumnie.
• stała
Element o nadanej nazwie, który zachowuje stałą wartość przez cały czas działania programu. Stała może być ciągiem znaków lub literałem numerycznym, inną stałą lub dowolną kombinacją zawierającą operatory arytmetyczne i logiczne, z wyjątkiem operatora Is oraz operatora potęgowania. Każda aplikacja główna może definiować własny zestaw stałych. Dodatkowe stałe mogą być definiowane przez użytkownika za pomocą instrukcji Const. Stałych można użyć w dowolnym miejscu kodu programu zamiast ich rzeczywistych wartości.