Zamykanie aplikacji

Do zamykania aplikacji Access w kodzie VBA wykorzystywana jest metoda DoCmd.Quit

Opcjonalny argument wyjściowy AcQuitOption to:

    • acQuitSaveAll – wartość domyślna, zamykanie Accessa z zapisaniem wprowadzonych zmian
    • acQuitSaveNone- zamknięcie z porzuceniem zmian

Przypominam, że nie chodzi tu o zmianę danych. To, co trafia do pola tabeli, od razu jest zapisane na dysku i nie da się tego cofnąć za pomocą obiektu DoCmd. Jeśli jednak mamy formularz i w Widoku Układu wprowadzamy zmiany np.formatowania pola, to za pomocą tej metody można zatwierdzić lub odrzucić te zmiany.


Kurs Access - programowanie w VBA

 

Zamykanie obiektów

Do zamykania obiektów w aplikacji Access wykorzystywana jest metoda DoCmd.Close.
Ma ona 3 opcjonalne argumenty wejściowe:

    • ObjectType – typ obiektu, który chcemy zamknąć (formularz, kwerenda, raport, makro itp.
    • ObjectName – nazwa obiektu do zamknięcia
    • Save – możliwość zapisania zmian.
      Do wyboru są tu 3 możliwości

      • acSaveNo – bez zapisywania zmian
      • acSaveYes – z zapisaniem zmian
      • acSavePromt – pojawia się komunikat z pytaniem o zapisanie zmian

Warto tu jednak zauważyć, że nie chodzi tu o zmianę danych. To, co trafia do pola tabeli, od razu jest zapisane na dysku i nie da się tego cofnąć za pomocą obiektu DoCmd. Jeśli jednak mamy formularz i w Widoku Układu wprowadzamy zmiany np.formatowania pola, to za pomocą tej metody można zatwierdzić lub odrzucić te zmiany.


 

 

Obiekt DoCmd

DoCmd to wbudowany obiekt VBA w aplikacji Access. Ma wiele pożytecznych metod służących głównie do zarządzania innymi obiektami.

Do najczęściej stosowanych należą metody związane z otwieraniem i zamykaniem obiektów (formularzy, raportów, kwerend czy tabel), przechodzeniem między rekordami, odświeżaniem ekranu itd. Możliwości jest tu sporo i warto opisać je szczegółowo, tym bardziej, że parametry wejściowe poszczególnych metod mają znaczenie.

Zapraszam do notek z tagiem DoCmd.

 

 

Opcje modułu VBA

Na początku każdego modułu w edytorze VBA zawsze pierwsze linijki kodu  związane są z jego opcjami. Standardowo pierwsza linia to:

    • Option Compare
      opcja porównania ciągów

        • Option Compare Binary
          cyfrowe porównanie znaków tekstowych, gdzie:
          np. “A” < “a” , “12” > “112”
        • Option Compare Text
          tekstowe porównanie znaków tekstowych, gdzie:
          np. “A” = “a”
        • Option Compare Database
          (opcja domyślna)

          porównanie znaków tekstowych uzależnione od strony kodowej i ustawień regionalnych komputera. Najczęściej jest to zgodne z właściwościami Option Compare Text, czyli
          np. “A” = “a”

    • Option Explicit
      opcja wymuszająca deklarację zmiennych w funkcjach i procedurach zapisanych w module czyli każda ze zmiennych musi być zapisana w bloku np.
      Dim Zmienna1 as Integer
      Dim Zmienna2 as Date
      Domyślnie nie jest wpisana do modułu, ale warto dopisać tę linijką. W ten sposób jeżeli gdzieś  w kodzie pojawi się literówka – od razy wyskoczy to przy kompilacji kodu, gdyż niezadeklarowana zmienna nie zostanie zaakceptowana.
      Opcję tę można włączyć na stałe jako domyślne ustawienie modułu, zaznaczając checkbox w edytorze VBA Tool–> Options…
    • Option Private Module
      ukrywanie funkcji i procedur zapisanych w module.
      Po wpisaniu tej linijki na początku modułu zapisane w nim publiczne funkcje/procedury są widziane w innych modułach kodu, ale nie są dostępne w kreatorze wyrażeń Accessa.

 

Kurs Access - programowanie w VBA

 

Kwerenda grupująca

Kwerenda grupująca to kwerenda, która przedstawia poszczególne rekordy tabeli w formie zgrupowanej lub podsumowanej (i to nie tylko w formie sumy). Tworzona jest bardzo podobnie jak zwykła kwerenda wybierająca.

Na przykładzie wielokrotnie już cytowanej na blogu tabeli ze spisem książek:

spróbujmy policzyć ilość książek w każdym z działów.

Tworzymy nową kwerendę, która ma 2 kolumny: Dział oraz Tytuł.

Następnie w widoku projektu kwerendy, w grupie opcji Pokazywanie/ukrywanie naciskamy przycisk sumy

Poszczególne pola kwerendy w widoku projektu będą od tej pory wyglądać tak:Domyślnie są one zgrupowane, ale wiersz Podsumowania ma więcej możliwości.

Wybierając np. Policz w kolumnie Tytuły oraz pozostawiając grupowanie w polu Dział,  otrzymany efekt końcowy wygląda tak:

Warto też zauważyć, że w kwerendzie zgrupowane pole Dzial nie zmieniło swojej nazwy, natomiast pole Tytul, gdzie zastosowano zliczanie, ma obecnie nazwę PoliczOfTytul. To nazwy pól, ale tak jak w każdym z obiektów Accessa,  zawsze można zmienić widoczną nazwę na bardziej przyjazną poprzez wypełnienie Tytułu pola.
W projekcie kwerendy:

W tym przypadku wstawiłam jako tytuł kolumny “Liczba tytułów” i kwerenda po otwarciu w widoku arkusza wygląda tak:

Sama nazwa kolumny nie zmieniła się, ale jej wyświetlanie na ekranie już tak. Warto stosować, gdyż w tytułach można bez problemu stosować polskie znaki z ogonkami, spacje itp.


Kurs Access - kwerendy

 

 

 

Typy danych w kodzie VBA

Początek kodu każdej funkcji to deklaracja zmiennych. Najczęściej stosowane typy danych to:

Boolean Typ logiczny.
Przyjmuje dwie wartości:
True – prawda
False – fałsz   
Integer typ całkowity.
Obejmuje liczby całkowite z zakresu -32 768 do 32 767
Long Typ całkowity długi.
Obejmuje liczby całkowite z zakresu -2 147 483 648 do
2 147 483 647
Currency Typ wautowy.
Obejmuje liczby rzeczywiste z 15 cyfr przed i 4 po przecinku
Single Typ rzeczywisty pojedynczej precyzji.
Obejmuje liczby rzeczywiste z zakresu:
od -3.402823 E38 do -1.401298E-45
oraz od 1.401298E-45 do 3.402823E38
Double Typ rzeczywisty podwójnej precyzji.
Obejmuje liczby rzeczywiste z zakresu:
od -1.79769313486231E308 do -4.94065645841247E-324
oraz od 4.94065645841247E-324 do 1.79769313486232E308
Date Typ daty.
Obejmuje daty od 1 stycznia  1900r. do 31 grudnia 9999r.
String Typ łańcuchowy często nazywany także tekstowym.
Obejmuje znaki z klawiatury – może ich być od zera do 2 bilionów
Variant Typ ogólny.
Zadeklarowanie zmiennej jako typ Variant jest w zasadzie jednoznaczne z brakiem deklaracji typu. Dostęp do danych jest jednak dłuższy i spowalnia program.  

 

Formularz ciągły

Formularz ciągły to formularz, w którym na jednym ekranie formularza wyświetlanych jest wiele rekordów.
Można go utworzyć oczywiście standardowo za pomocą Kreatora Formularzy, ale można też zbudować go samodzielnie.

Jeden ze sposobów przedstawiłam w krótkim filmiku na moim
kanale YouTube o Accessie

Ujmując to skrótowo kolejne kroki to:

    • karta Tworzenie –> Grupa Formularze –> Projekt formularza

    • w Arkuszu Właściwości Formularza zmieniamy widok domyślny na Formularz Ciągły

    • następnie pozostaje tylko sformatowanie poszczególnych formantów formularza

Formularz ciągły może być stosowany samodzielnie w aplikacji, może też być też stosowany jako podformularz.


Kurs Access - formularze i raporty

Kryteria wyszukiwania

W zależności od typu danych w danym polu kwerendy, kryteria wyszukiwania mogą być zdefiniowane w następujący sposób:

  • Tekst
    symbole zastępujące znak/ciągi znaków:
* dowolny znak lub ciąg znaków, również o zerowej długości
?
pojedynczy znak
#
cyfra
[A-Z]
pojedynczy znak z listy liter alfabetu
[!A-Z]
pojedynczy znak spoza listy liter alfabetu
[0-9]
pojedynczy znak z listy cyfr
 [!0-9] pojedynczy znak spoza listy cyfr
[ĄĘĆŚ,;]
pojedynczy znak z samodzielnie zdefiniowanej listy znaków
[!ĄĘĆŚ,;] pojedynczy znak spoza samodzielnie zdefiniowanej listy

Jak to wygląda w praktyce? Np. tak:

Like “*a*” – rekordy zawierające literę a, wielkość liter nie ma znaczenia
Like “*#*” – rekordy zawierające cyfrę
Like “?1*2” – rekordy zawierające cyfrę na drugim miejscu i kończące się
                           cyfrą2
Like “*[ąęó]*” – rekordy zawierające jedną z liter wpisanych w nawiasie

  • Data
    kryteria wyboru daty muszą być umieszczone w hasztagach.
    Np. chcąc wyfiltrować konkretną datę wpisujemy
    #2020-11-29#.
    Dla zakresu dat będzie to wyglądało tak:
    >#2020-11-09# And <#2020-11-17#
    znaki nierówności mogą być też nieostre czyli np.
    >=#2020-11-09# And <=#2020-11-17#
    Zakres dat można też ująć w zapisie:
    between #2020-11-09# And <#2020-11-17# 
    – w tym przypadku daty krańcowe też są brane do wyszukiwania. 
    W wyszukiwaniu dat bardzo ważnym aspektem jest też format daty. Jeżeli daty w kolumnie są zapisane (niezależnie od tego, jaki jest format wyświetlania daty) również z datą i godziną, to kryterium wyszukiwania ograniczone do zapisu #2020-11-20# wyznaczy rekordy tylko z godziną 00:00 tego dnia, każda inna godzina nie spełnia kryterium. W takim przypadku konieczny jest zapis:
    >=#2020-11-20# and <#2020-11-21#
    – czyli od godziny zero 20-go do wartości dat mniejszych od godziny zero dnia 21-go.
    Ewentualnie, pamiętając o tym, że data to liczba -można wstawić dodatkowe pole w kwerendzie oparte na formule =Clng([Pole daty]) i w tym polu wpisać kryterium:
    CLng(#2020-04-16#)
  • Wartości liczbowe
    kryteria wyboru są tu proste, znane z matematyki. Działają tu wszystkie operatory matematyczne typu > czy <.
    W stosunku do wartości liczbowych można tez stosować konstrukcję Between…And…
  • Prawda/Fałsz
    tu jako kryterium wystarczy wpisać po prostu Prawda lub Fałsz. Można też zastosować wartości liczbowe:
    0 – fałsz
    -1 – prawda

Niezależnie od typu danych często pojawia się konieczność wyszukania z brakiem wartości w danym polu. Kryterium dla takich rekordów to:
Is Null – dla  pustych rekordów
Is Not Null – dla niepustych rekordów

 


 

Kurs Access - kwerendy

Filtrowanie w kwerendzie wybierającej

Filtrowanie rekordów w kwerendzie wybierającej definiowane jest w oknie widoku projektu kwerendy. 


Kryteria wyszukiwania rekordów wpisywane są w zaznaczone wiersze kwerendy. Obowiązuje tu zasada,  że kryteria wpisane w tym samym wierszu muszą być spełnione łącznie. Kolejne wiersze kryteriów są dodawane do filtrowania jako alternatywa czyli ze słowem kluczowym LUB.

Np. dla tabeli ze screenu poniżej:

spróbujmy wyfiltrować rekordy, w których Autor to Agata Christie oraz cena jest wyższa niż 20zł. Zapis kwerendy to:

a wyfiltrowane dane (czyli kwerenda w widoku Arkusza) to:

Kwerenda pokazująca rekordy, w których Autor to Agata Christie lub cena jest wyższa niż 20zł to:

w widoku Arkusza:

Oczywiście kryteria wyszukiwania nie muszą być tak ściśle określone jak w powyższych przykładach. W zależności od typu danych można je zdefiniować bardziej wieloznacznie.
Kryteria wyszukiwania


Funkcja NZ

Funkcja NZ jest moją ulubioną funkcją Accessa, często ją wykorzystuję – zarówno w wyrażeniach jak i w kodzie VBA. Funkcję można opisać jako wartość jeśli null.
Argumenty funkcji to:

    • wartość pola – wartość pobrana z tabeli, kwerendy lub wyrażenia.
      Typ danych – variant.
    • wartość jeśli null – czyli co wstawić, jeżeli wartość pola będzie nullem.
      Typ danych – variant, uzależniony od typu pola.

W praktyce najczęściej stosuje się formuły:

    • =nz(wartosc_pola;O) – dla wartości liczbowych
    • =nz(wartosc_pola;””) – dla wartości tekstowych

Odpowiednikiem funkcji nz w VBA jest funkcja o tej samej nazwie.


 

Kurs Access 2010 esencja