Funkcja Environ

Funkcja Environ jest funkcją VBA dostarczającą informacje o środowisku (czyli w praktyce – komputerze), na którym pracujemy.
Najczęściej stosowana jest z argumentami:

    • Environ(“ComputerName”)
      zwraca nazwę komputera
    • Environ(“UserName”)
      zwraca nazwę użytkownika
    • Environ(“Temp”)
      zwraca pełen adres katalogu tymczasowego

U mnie  praktyce najczęściej sprawdza się ta ostatnia. Folder tymczasowy wykorzystuję m.in. do zapisu raportów w formacie np.pdf w sytuacji, gdy nie jestem pewna, gdzie będzie docelowe miejsce na takie raporty. Wprawdzie na ogół stosuję zasadę, że na raporty tworzę specjalny podfolder w lokalizacji, gdzie znajduje się aplikacja (korzystam tu z właściwości CurrentProject.Path), ale są sytuacje, gdy na serwerach sieciowych dostęp do nich mogłoby mieć również osoby nieupoważnione. Wówczas przy tworzeniu raportu, zapisuję go właśnie w folderze tymczasowym Temp, otwieram plik, a sam użytkownik może zdecydować, gdzie go finalnie zapisać.


Egzamin Specjalista MS Access

Etykiety w kodzie VBA

W kodzie VBA można wstawiać linie stanowiące jakby zakładki, do których można przeskakiwać z dowolnego miejsca danej procedury. Linie te są oznaczone Etykietami.
Etykieta to wstawiony na początku linii ciąg znaków (bez spacji) zakończony dwukropkiem.
Przejście do linii z etykietą wykonywane jest poprzez instrukcję
Goto <nazwa etykiety>

Przykładowy kod może to wyglądać tak:

Public Sub Etykiety()
If IsNull(Me.textBox1) Then GoTo PustePole
‘ciag instrukcji
Exit Sub
PustePole:
MsgBox “Brak wartości!”
End Sub

W przedstawionym przykładzie kodu – jeżeli TextBox1 jest pusty (wartość null), następuje od razu przeskok do linii etykiety PustePole i kod jest wykonywany od tej linii do końca. Jeżeli TextBox1 nie jest pusty – wykonywany jest ciąg instrukcji.
W linii bezpośrednio poprzedzającej etykietę jest instrukcja Exit Sub, żeby ominąć ciąg instrukcji po etykiecie.


Kurs Access - programowanie w VBA

Kwerendy funkcjonalne

Kwerendy funkcjonalne (nazywane też funkcyjnymi) to kwerendy wprowadzające zmiany w tabelach bazy danych Access.

Podstawowe kwerendy funkcjonalne to:

      • kwerenda tworząca tabelę
        tworzy nową tabelę na podstawie wybranych danych z innych tabel/kwerend
      • kwerenda aktualizująca
        zmienia dane w tabeli

      • kwerenda dołączająca
        dodaje wybrany zestaw rekordów do tabeli
      • kwerenda usuwająca
        usuwa wybrany zestaw rekordów z tabeli

Zmiany wprowadzone przez kwerendy funkcjonalne są nieodwracalne.


Kurs Access - kwerendy

 

 

 

Funkcja Split

Funkcja Split to jedna z funkcji tekstowych VBA. W wyniku jej działania otrzymujemy tablicę wartości będących fragmentami wyrażenia tekstowego, oddzielonych określonym separatorem.
Argumenty funkcji to:

    • Expression– argument obowiązkowy. Ciąg tekstowy do rozdzielenia
    • Delimiter– argument opcjonalny. Znak rozdzielający. Wartość domyślna to spacja (” “).
    • Limit as Long– argument opcjonalny. Wyznacza kolejny numer podciągu tekstowego. Wartość domyślna =-1 – zwraca wszystkie kolejne ciągi.
    • Compare – sposób porównywania tekstów:
      • vbBinaryCompare – binarne wyszukiwanie znaków (czyli wielkość liter ma znaczenie). Opcja domyślna
      • vbDatabaseCompare – wyszukiwanie zgodne z ustawieniami bazy danych/modułu
      • vbTexCompare – tekstowe wyszukiwanie znaków (czyli wielkość liter nie ma znaczenia)

W uproszczeniu działanie funkcji Split polega na rozbiciu łańcucha  tekstowego na mniejsze ciągi znaków.
Np.  wyrażenie tekstowe “abc|123|xyz” za pomocą funkcji Split można wykorzystać do otrzymania ciągów:
abc
123
xyz
Deliminatorem jest w tym przypadku znak “|“.

Przykładowy kod może wyglądać tak:

Public Sub RozdzielTekst()
Dim a
Dim b
Dim c
Dim ROZ As Variant
Dim JTekst As String
JTekst=”abc|123|xyz”
ROZ=SPLIT(JTekst,”|”)
a=ROZ(0)
b=ROZ(1)
c=ROZ(2)
End Sub

Przy stosowaniu funkcji Split w procedurze czy funkcji należy pamiętać o:

    • separatorem powinien być znak rzadko wykorzystywany, żeby nie dochodziło do nieprawidłowego podziału. Najlepiej wykorzystywać tu znak |.
    • zmienna będąca wynikiem działania funkcji (w przykładzie zmienna ROZ) musi być zadeklarowana jako typ Variant
    • poszczególne elementy wyniku działania funkcji są numerowane od zera
    • każdy element wynikowy jest tekstem. Jeżeli jest to liczba zapisana jako tekst – musimy dokonać jej konwersji.
      W przykładzie dla drugiego elementu tablicy konieczne jest więc zastosowanie b=CInt(ROZ(1)) lub CLng(ROZ(1))

Funkcja Split jest często stosowana w praktyce. Ja najczęściej wykorzystuję ją do przekazywania kilku różnych wartości pomiędzy formularzami lub raportami. Zamykając jeden obiekt, tworzę ciąg, który w formie argumentu OpenArgs w docmd trafia do obiektu, w którym za pomocą właśnie Split “odzyskuję” poszczególne wartości.


Kurs Access 2010 esencja

Otwieranie obiektów

Do otwierania obiektów (m.in. formularzy, raportów, tabel, kwerend itp.) kodem VBA wykorzystywana jest metoda DoCmd.Open
np.dla formularza:

Argumenty wejściowe to:

    • FormName – nazwa formularza, który ma zostać otwarty. Argument obowiązkowy
    • AcFormView – widok formularza po otwarciu
      Argument opcjonalny, wartość domyślna acNormal
    • FilterName – nazwa kwerendy stanowiącej filtr dla danych otwieranego formularza. Argument opcjonalny, raczej rzadko stosowany.
    • WhereCondition – opcjonalny argument typu string. W tym miejscu definiujemy filtr wyświetlanych rekordów, odwołując się do ograniczenia wartości pól źródła rekordów formularza.
    • DataMode – sposób dostępu do danych. Argument opcjonalny.
      Do wyboru są tu 4 możliwości

      • acFormAdd – formularz otwierany jest w trybie dodawania nowego rekordu
      • acFormEdit -formularz otwierany jest w trybie edycji/dodawania rekordów
      • acFormPropertySettings – edycja, dodawanie oraz zmiana właściwości formularza. Wartość domyślna  argumentu.
      • acFormReadOnly – formularz tylko do odczytu
    • WindowsMode – otwarcie okna nowego formularza
      • acDialog – formularz jest otwierany w trybie  modalnym i podręcznym – wymaga to reakcji w nowym formularzu (np.naciśnięcia przycisku czy wpisania wartości w polu tekstowym).
      • acHidden – formularz jest niewidoczny dla użytkownika
      • acIcon – formularz otwierany jest w oknie zminimalizowanym
      • acNormal – formularz otwierany jest zgodnie z właściwościami zapisanymi w jego arkuszu właściwości. Wartość domyślna.
    • OpenArgs – argument otwarcia nowego formularza. Używany jest do przekazywania wartości pomiędzy formularzami.

 

 

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