Język VBA udostępnia nam możliwość skracania odwołań do obiektów poprzez zastosowanie konstrukcji With....End With
With Obiekt kod End WithGdzie:
Obiekt jak sama nazwa wskazuje jest Obiektem który będziemy wykorzystywać wielokrotnie
kod to czynności które wykonamy wykorzystując wcześniej zadeklarowane odwołanie do obiektu czyli korzystamy z jego metod i właściwości poprzedzając je znakiem kropki np.
.top = 10Ciekawostką jest to że obiektem może być dowolne coś co zwraca nam w wyniku operacji zmienną obiektową np.
Function getFromTable(id As Integer) As Variant With CurrentProject.Connection.Execute("select opishtml from tabela where id =" & id) If .EOF Or .BOF Then getFromTable = Empty: Exit Function getFromTable = Nz(.Fields.Item(0).Value, Empty) End With End FunctionWykorzystuję tu fakt że wynikiem wykonania metody .Execute jest obiekt ADODB.Recordset. Fakt jest to mocno niejawne ale działa :)
Wyjaśnienia mogą jeszcze wymagać elementy .EOF or .BOF - jest to sprawdzenie czy rekordset przypadkiem nie jest pusty. Gdyby był to kolejna linia wygenerował by błąd
getFromTable = Nz(.Fields.Item(0).Value, Empty)Ta linia natomiast podstawia pod zmienną wartość elementu o indeksie 0 z kolekcji .Fields. Elementy tej kolekcji budują pojedynczy wiersz Recordset-a. Sprawdzam przy okazji czy wartość przypadkiem nie jest Null i jak jest to podstawiam Empty
Funkcja Nz jest z defaultu dostępna tylko w Accessie, ale bardzo łatwo ją skonstruować samodzielnie z wykorzystaniem funkcji logicznej IsNull(zmienna) oraz IF albo jeszcze szybciej IIF. Dla niewtajemniczonych funkcja ta sprawdza czy podany parametr jest wartością Null i jeżeli tak to podstawia pod wartość końcową drugi parametr. W przeciwnym wypadku jest zwracana wartość pierwotna.
Poniżej trzy wersje funkcji Nz. Mogą być przydatne np. w Excelu
Function Nz(vIn As Variant, vIsNull As Variant) As Variant If IsNull(vIn) Then Nz = vIsNull Else Nz = vIn End If End Function Function Nz(vIn As Variant, vIsNull As Variant) As Variant Nz = vIn If IsNull(vIn) Then Nz = vIsNull End Function Function Nz(vIn As Variant, vIsNull As Variant) As Variant Nz = IIf(IsNull(vIn), vIsNull, vIn) End Function
Morał
Wykorzystanie With ma wiele zalet jedną z nich jest możliwoć skrócenia kodu i jego wizualna optymalizacja. Kolejną niewątpliwą zaletą jest przyspieszenie kodu.
Brak komentarzy:
Prześlij komentarz