Access

  MS Access 2010+ i Visual Basic for Applications VBA 7.0



• Visual Basic for Applications

Co to jest VBA, każdy wie, i nie czas, ani miejsce na definicje i teoretyczne wywody na tamat VBA. Jedynie co mogę zrobić, to zamieścić parę pierwszych zdań na temat VBA z Wikipedii Visual Basic for Applications

Visual Basic for Applications (VBA) – język programowania oparty na Visual Basicu (VB) zaimplementowany w aplikacjach pakietu Microsoft Office oraz kilku innych, jak na przykład AutoCAD i WordPerfect. Ta uproszczona wersja Visual Basica służy przede wszystkim do automatyzacji pracy z dokumentami, na przykład poprzez makropolecenia.

Podstawową różnicą między VBA a VB jest to, że VBA nie pozwala na tworzenie samodzielnych skompilowanych aplikacji typu EXE. Kod programu napisanego w VBA zawsze zawarty jest w dokumencie utworzonym przy pomocy programu obsługującego VBA - na przykład w pliku *.DOC edytora MS Word lub pliku *.XLS arkusza MS Excel. Program taki wymaga zatem środowiska uruchomieniowego, którym jest zainstalowana na komputerze aplikacja obsługująca dany dokument.

Wyjątkiem symulującym samodzielnie działające aplikacje są pliki utworzone w programie Microsoft Access, które przy zakupie rozszerzenia Microsoft Office Developer (*) lub innego, pozwalają na uruchamianie plików Accessa na dowolnej ilości komputerów w tzw. Microsoft Access Runtime, bez konieczności wyposażania każdego pojedynczego komputera w pełny pakiet Microsoft Office.

(*) od wersji MS Access 2007+ Microsoft oferuje za darmo „Środowisko uruchomieniowe programu Microsoft Access 2007+”, które umożliwia dystrybucję aplikacji opartych na programie Access 2007+ wśród użytkowników, którzy nie mają zainstalowanej na komputerze pełnej wersji programu
O środowisko uruchomieniowym programu Microsoft Access Runtime można przeczytać na stronach: • Wdrażanie aplikacji programu Access 2007
Środowisko uruchomieniowe programu Microsoft Access 2013

• Microsoft Office 2010+ - wersja 64 i 32 bitowa.

Co to jest 64-bitowy system.

Bardziej właściwe i uniwersalne określenie to „architektura x64”. Jest to model przetwarzania danych porcjami po 64 bitów. W odniesieniu do możliwości adresowania pamięci, 64 bity określają ilość możliwych do zaadresowania komórek. Ponieważ istnieje 264 wariacji 64-bitowego adresu, wynika stąd, że można bezpośrednio zaadresować 18 446 744 073 709 551 616 (16 eksabajtów) komórek pamięci. Bardziej obrazowo zabrzmi ok. 16 miliardów GB pamięci. Jak na razie nie jesteśmy w stanie zbliżyć się do tej wartości.

Architektura x64” to nie tylko ilość obsługiwanej pamięci. System x64 nie ustępuje systemowi x86 jeśli chodzi o szybkość w aplikacjach 32-bitowych. Jeżeli program (aplikacja) będzie skompilowany w obydwóch wersjach, to wersja 64 bitowa powinna być nieco szybsza. Warto pamiętać, że jeżeli program (aplikacja) będzie napisane w systemie 64 bitowym, to może być uruchomiona tylko na systemie 64-bitowym.

Co wybrać ? Pakiet Microsoft Office 2010+ w wersji 32 bitowej, czy 64 bitowej ?

Microsoft Office 2010+ jest obecnie dostępny w 32 i 64 bitowej wersji. Wraz z wprowadzeniem 64 bitowej wersji pakietu Microsoft Office 2010+, wprowadzona została nowa wersja Microsoft Visual Basic for Applications 7.0 (VBA 7). 32 bitowa wersja pakietu Office 2010+ pozwala nadal używać istniejących 32 bitowych dodatków dla pakietu Office oraz korzystanie ze „starego” kodu bez konieczności jakichkolwiek modyfikacji w kodzie VBA.

Jeżeli zdecydujemy się na korzystanie z 64 bitowej wersji Microsoft Office, to musimy się liczyć z konsekwencjami migracji na nowy system, w którym nie będą prawidłowo funkcjonowały m.in.:

  1. Visual Basic for Applications zawierające instrukcję Declare funkcji 32 bitowych. Należy zaktualizować kod, tak by wszystkie istniejące 32 bitowe odwołania do wskaźnikówuchwytów zostały zastąpione 64 bitowymi odpowiednikami.
  2. Biblioteka formantów ActiveX ComCtl zawierająca m.in. kontrolki: ImageCombo, ImageList, ListView, ProgressBar, Slider, StatusBar, TabStrip, Toolbar, TreeView
  3. Formanty ActiveX, dodatki COM oraz biblioteki DLL w wersji 32 bitowej. Należy je zastąpić nowymi, 64 bitowymi zamiennikami (o ile takie istnieją).
  4. Skompilowane bazy danych programu Access w postaci plików MDE oraz ACCDE należy zaktualizować, przetestować i skompilować w wersji 64  bitowej.
  5. Integracja programu Communicator po zainstalowaniu 64 bitowej wersji pakietu Office zostaną utracone niektóre funkcje programu Microsoft Office Communicator 2007, obejmujące m.in. integrację z programem Outlook.

Jeżeli chcemy korzystać w 64 bitowej wersji Microsoft Office z rozwiązań opartych na funkcjach API (ang.) Application Programming Interface, (interfejs programowania aplikacji) to musimy zaktualizować wszystkie istniejące 32 bitowe odwołania do wskaźników (address pointers)uchwytów (handlers) odwołujących się do określonych miejsc w pamięci fizycznej, do 64 bitowych odwołań tak, by pracowały prawidłowo w wersji 64 bitowej.

W zależności od tego, czy używamy 32 lub 64 bitowej wersji, rozmiar wskaźnika lub uchwytu (w bajtach) będzie różny. W aplikacjach 64 bitowych do przechowywania wskaźników i uchwytów używana jest 64 bitowa liczba całkowita typu LongLong lub specjalny typ LongPtr, który jest 8 bajtową liczbą typu LongLong w 64 bitowej wersji pakietu Office 2010+ i 4 bajtową liczbą typu Long w wersji 32 bitowej pakietu Office w wersji 2010+ i wyższej. Wcześniejsze (32 bitowe) VBA nie miało takiego typu do przechowywania wskaźnikówuchwytów, więc w przypadku zadeklarowania wskaźnika (uchwytu) jako typ Long, wszystkie zmienne 64 bitowe zostałyby „ucięte” do wartości 32 bitowej i wskazywałyby na nieprawidłowy uchwyt.

• Visual Basic for Applications 7.0

Wraz z wprowadzeniem 64 bitowej wersji pakietu Microsoft Office 2010+, wprowadzona została przez Microsoft nowa wersja Visual Basic for Applications 7.0 (VBA 7). Podstawowe zmiany w VBA 7 to 64-bitowe uchwyty (handlers)wskaźniki (address pointers), odwołujących się do określonych miejsc w pamięci fizycznej. W celu ułatwienia pracy programistom wprowadzono nowe typy danych, nowy znak deklaracji zmiennych (^), nowe funkcje konwersji danych, nowe, uniwersalne, funkcje zwracające wskaźniki VarPtr, ObjPtr, StrPtr, stałą vbLongLong = 20 określającą typ zmiennej LongLong oraz dwie stałe kompilacji warunkowej VBA7 i Win64.

W celu ułatwienia pracy programistom wprowadzono:
• kwalifikator PtrSafe,
• dwa nowe typy danych:
uniwersalny typ LongPtr,
64-bitowy typ LongLong,
• nowy znak deklaracji zmiennych:
^ - jako typ LongLong
• dwie nowe funkcje konwersji danych:
CLngPtr,
ClngLng,
• trzy zmodyfikowane funkcje zwracające wskaźnik typu LongPtr:
VarPtr,
ObjPtr,
StrPtr,
• stałą:
vbLongLong,
• dwie stałe kompilacji warunkowej:
VBA7,
Win64.
 

Poniżej tabelka opisująca dokładniej nowości w VBA 7

Typ Pozycja Opis
Kwalifikator PtrSafe Określa, że deklaracja jest zgodna z 64 bitowymi środowiskami programistycznymi. Atrybut ten jest obowiązkowy w systemach 64 bitowych.
Typ danych LongPtr 8 bajtowa liczba (LongLong) w 64 bitowej wersji pakietu Office 2010+ i 4 bajtowa (Long) w wersji 32 bitowej pakietu Office w wersji 2010+ i wyższej. Typ ten jest zalecany przy deklarowaniu wskaźników i uchwytów, zarówno w środowisku 32 bitowym jak i 64 bitowym. Należy pamiętać, że typ ten jest obsługiwany tylko w VBA 7 (zarówno w 32 bitowym jak i 64 bitowym środowisku). Korzystanie z typu LongPtr umożliwia pisanie przenośnego kodu, który może działać zarówno 32 jak i 64-bitowym środowisku VBA7.
Typ danych LongLong 8 bajtowy typ danych. Przechowuje liczby w przedziale wartości od -9.223.372.036.854.775.808 do 9.223.372.036.854.775.807. Typ ten jest dostępny tylko w 64 bitowym środowisku (w 64 bitowej wersji pakietu Office.)
Znak deklaracji ^ Znak deklaracji zmiennej typu LongLong.
Operator konwersji CLngPtr Konwertuje przekazywane wyrażenie do typu LongPtr.
Operator konwersji CLngLng Konwertuje przekazywane wyrażenie do typu LongLong.
Funkcja VarPtr Zwraca wskaźnik typu LongPtr w wersji 64 bitowych do przekazanej zmiennej, a typu Long w 32 bitowym środowisku.
Funkcja ObjPtr Zwraca wskaźnik typu LongPtr w wersji 64 bitowych do przekazanego obiektu, a typu Long w 32 bitowym środowisku.
Funkcja StrPtr Zwraca wskaźnik typu LongPtr w wersji 64 bitowych do przekazanego ciągu znaków, a typu Long w 32 bitowym środowisku.
Stała vbLongLong = 20 stała określająca typ zmiennej LongLong (tylko w 64 bitowym środowisku).
Pakiet Microsoft Office w wersji 2010+ lub nowszej zawiera dwie nowe stałe kompilacji warunkowej:
Stała kompilacji VBA7 Umożliwia sprawdzenie, czy uruchomiona aplikacja używa nowego VBA 7 (64 bitowego lub 32 bitowego), czy poprzedniej 32 bitowej wersji VBA (6.0).
Zwracana wartość VBA7 = TRUE informuje, że uruchomiona została aplikacja pakietu Office w wersji 2010+ lub nowszej.
Stała kompilacji Win64 Umożliwia sprawdzenie, czy uruchomiona została 32 bitowa, czy 64 bitowa wersja pakietu Microsoft Office.