Instrukcja Select … Case_

Instrukcja Select … Case_ w kodzie VBA przypomina swoim działaniem funkcję Switch().  
Dla jednej wyznaczonej wartości argumentu sprawdza, który z kolejnych warunków jest spełniony i gdy znajdzie wartość True – wychodzi z instrukcji. 

Przykład działania instrukcji:

Public Function SprawdzDate(JData)
Dim DzienTyg As Integer
If IsNull(JData) Then
DzienTyg = 0
Else
DzienTyg = Weekday(JData, vbMonday)
End If
Select Case_ DzienTyg
Case_ 0
SprawdzDate = „brak daty”
Case_ Is < 3
SprawdzDate = „początek tygodnia”
Case_ Is < 6
SprawdzDate = „środek tygodnia”
Case_ Else
SprawdzDate = „weekend”
End Select
End Function

Efekt końcowy w kwerendzie:

Warto zwrócić uwagę na ostatni warunek czyli 
Case_ Else
– z
wraca wartość zwracaną dla wszystkich przypadków niespełniających wcześniejszych warunków. 

Czy warto stosować tę instrukcję? Moim zdaniem tak. Bardzo ładnie zastępuje skomplikowane zagnieżdżone funkcje If Then

Uwaga: niestety WordPress nie powala na użycie słowa musiałam w treści notki zastąpić je słowem Case_. 


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

Funkcja Switch() w Accesie

Funkcja Switch() to funkcja sterowania Accessa.  

Funkcja wyszukuje pierwsze wyrażenie, które zwraca Prawda i zwraca przypisaną do niego wartość.
Argumenty funkcji to pary:

    • Expr_1- wyrażenie zwracające wartość Prawda/Fałsz
    • Value_1– zwracana wartość funkcji, jeżeli Expr_1 to Prawda
    • ….
    • Expr_n- wyrażenie zwracające wartość Prawda/Fałsz
    • Value_n– zwracana wartość funkcji, jeżeli Expr_n to Prawda

Przy znalezieniu pierwszego spełnionego warunku kolejne warunki nie są już sprawdzane. 
Jeżeli żaden z warunków nie jest spełniony – funkcja Switch() zwróci wartość null
Ilość par argumentów nie jest określona (nie ma jej w dokumentacji Accessa), ale ilość znaków w formule nie powinna przekraczać 2048. 

Funkcja występuje w kreatorze wyrażeń. Na przykład w takiej kwerendzie: 

Kolumna Przyklad1 jest oparta o formułę:

Switch([DataP] Is Null;”brak daty”;Weekday([DataP];2)<6;”dzień roboczy”;Weekday([DataP];2)>5;”weekend”)

Kolumna Przyklad2 jest oparta o formułę:

Switch([DataP] Is Null;”brak daty”;[NumerKatalogowy]<1010;”numer”;Weekday([DataP];2)<6;”dzień roboczy”;Weekday([DataP];2)>5;”weekend”)

W tym drugim przykładzie  warunek Expr_2 jest oparty o inne pole niż pozostałe warunki – ważne jest tylko to, czy jest spełniony. 

Odpowiednikiem funkcji w kodzie VBA jest ta sama funkcja Switch()


Nazwy kodowe modułów

Widoczne w edytorze VBA moduły mają swoje własne, unikalne nazwy. Po dodaniu nowego modułu, przy jego zapisaniu od razu pojawia się okienko, gdzie można wpisać jego nazwę. 

Tak zapisaną nazwę modułu można później zmienić. Wystarczy zaznaczyć dany moduł i nacisnąć klawisz funkcyjny F4

W oknie właściwości widoczna jest nazwa pierwotnie zapisana (w tym przykładzie domyślna), ale można ją zmienić na inną.

W ten sposób można zmieniać tylko nazwy modułów ogólnych, nazwy modułów prywatnych poszczególnych obiektów (formularz, raport) mają stałe nazwy i nie można ich zmieniać. 


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

 

Minimalizacja okna

Minimalizacja formularza czyli schowanie go w oknie aplikacji Access jest możliwa za pomocą metody docmdMinimize

  • kliknij, aby powiększyć

    Po minimalizacji formularz nadal jest załadowany, może nawet być aktywny, ale jest „spuszczony na belkę”. 

Ja jakoś nie pamiętam, żebym kiedyś stosowała tę metodę. Choć w niektórych sytuacjach może się przydać. 


Maksymalizacja okna

Jak spowodować, aby np. formularz czy raport otwierał się w pełnym oknie ekranu?  Możemy tu wykorzystać jedną z metod metod docmdMaximize
Stosuje się ją najczęściej przy otwarciu lub załadowaniu formularza. 

kliknij, aby powiększyć
  • W ten sposób – aktywny formularz będzie widoczny w całym oknie Accessa. 
    Moim zdaniem – warto stosować. 

 

Kurs Access - programowanie w VBA

Właściwość Recordset.EOF

EOF to własciwość obiektu Recordset określająca koniec zestawu rekordów. 

kliknij, aby powiększyć

Jeżeli bieżąca pozycja kursora jest za ostatnim rekordem zestawu lub Recordset nie zawiera żadnych rekordów, właściwość EOF zwraca wartość True
W pozostałych przypadkach, EOF przyjmuje wartość False.

Właściwość EOF jest wykorzystywana najczęściej do sprawdzenia, czy możliwe jest przejście do następnego rekordu. 
Np.

Private Sub Koniec_Click()
Dim RST As ADODB.Recordset
Set RST = New ADODB.Recordset
RST.Open „TabelaKsiazki”, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
With RST
If Not .EOF Then .MoveFirst
While Not .EOF
’ (…)

If Not .EOF Then .MoveNext

Wend
.Close
End With
Set RST = Nothing
DoCmd.Close
End Sub

W tym przykładzie przejście do kolejnego rekordu następuje tylko wtedy, gdy właściwość EOF ma wartość False


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela

Właściwość Recordset.BOF

BOF to własciwość obiektu Recordset określająca początek zestawu rekordów. 

kliknij, aby powiększyć

Jeżeli bieżąca pozycja kursora jest przed pierwszym rekordem właściwość BOF zwraca wartość True
W pozostałych przypadkach, również w przypadku, gdy Recordset nie zawiera żadnych rekordów, BOF przyjmuje wartość False.

Właściwość BOF jest wykorzystywana najczęściej do sprawdzenia, czy Recordset ma rekordy. 
Np.

Private Sub PolecenieOtwórz()
Dim RST As ADODB.Recordset
Set RST = New ADODB.Recordset
RST.Open „TabelaKsiazki”, CurrentProject.Connection, adOpenDynamic, adLockOptimistic
With RST
  If .BOF Then
     ’ (…)
  End If
.Close
End With
Set RST = Nothing
DoCmd.Close
End Sub

W tym przykładzie wejście do przechodzenia przez poszczególne rekordy następuje tylko wtedy, gdy właściwość BOF ma wartość True


A tu możesz mi postawić kawę: 

buycoffee.to/marzatela