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

 

 

 

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