Wyrażenie Kill

Wyrażenie Kill(Pathname) w kodzie VBA szybko i bez problemu usuwa plik z dysku.
Pathname – argument obowiązkowy typu String – pełen adres pliku na dysku, który chcemy usunąć.

Jeżeli plik nie istnieje – pojawi się błąd wykonania 53.

Uwaga: po użyciu wyrażenia Kill usunięty plik nie trafia do kosza – nie da się go przywrócić.


 

Kurs Access - programowanie w VBA

Dodawanie nowego rekordu

W aplikacji Access dane są zapisywane w tabeli. Bezpośredni dostęp do tabel (zarówno w do jej projektu jak i zapisanych danych) powinien mieć jednak tylko administrator bazy. Normalny użytkownik zarówno edytować jak i dodawać/usuwać dane powinien tylko poprzez odpowiednio oprogramowane formularze.
Owszem, można normalny, oparty na kwerendzie lub tabeli formularz otworzyć w trybie dodawania, ale moim zdaniem nie jest to dobre wyjście. W takim formularzu dane trafiają od razu do tabeli, nie trzeba ich zapisywać i tracimy kontrolę nad poprawnością wprowadzanych danych. Oczywiście, można wstawić reguły poprawności, ale to, że w danym polu jakaś wartość nie da się wpisać, nie wyklucza wcale tego, że nowy rekord został dodany, choć z niepełnymi danymi. Bardzo szybko może spowodować to bałagan.

Zdecydowanie lepszym rozwiązaniem jest formularz bez źródła danych, z niezwiązanymi polami.
Na przykład dla takiej tabeli:

dobrym rozwiązaniem może być taki formularz dodawania

Warto każde pole odpowiednio sformatować i nadać własne nazwy. To ostatnie nie jest wprawdzie konieczne, ale standardowe nazwy typu Tekst123, Tekst378 utrudnią później pracę, nazwy typu TekstTytul, czy Dzial itp. zdecydowanie ułatwią odwoływanie się  do nich w kwerendach czy kodzie VBA. Można tu też wpisać wartości domyślne – np.Data przyjecia=Date() (czyli bieżąca data systemowa).

Oczywiście też przyciski Zapisz – do zapisania danych w tabeli oraz Anuluj – do zamknięcia formularza bez zapisywania.
A jak zapisać dane? Jest tu kilka sposobów. Można uruchomić np. taką kwerendę dołączającą:

kliknij obrazek, aby powiększyć kwerendę

Poszczególne pola kwerendy to np…:
Wyr1: [Formularze]![Formularz_DodajKiazke]![TAutor]
dołaczane do pola Autor i w analogiczny sposób – kolejne. Potem wystarczy uruchomić kwerendę i dane zostają zapisane w tabeli.
Np. przez takie makro:

Oczywiście wskazane jest tu dodanie sprawdzenia czy wszystkie pola obowiązkowe są wypełnione i ewentualnie jaki typ danych  jest wpisany. No i samo uruchomienie kwerendy dołączającej spowoduje wyświetlenie komunikatów ostrzegawczych – też powinny zostać wyłączone na czas uruchomienia kwerendy.

Zdecydowanie lepszym sposobem na zapisanie danych z takiego formularza jest jednak procedura VBA.
Przypisujemy wartości poszczególnych pul formularza do zmiennych, sprawdzamy ich poprawność, a następnie wykonujemy kod SQL oparty na kodzie kwerendy dołączającej.
Przykładowy kod w tym przypadku może wyglądać tak:

Private Sub PolecenieZapisz_Click()
Dim JAutor As String
Dim JTytul As String
Dim JDzial As Long
Dim JCena As Currency
Dim JDataP As Date
Dim JBest As Boolean
Dim Kwera As String
If IsNull(Me.TAutor) Then
MsgBox “Brak autora”, vbCritical, “Brak wymaganych danych”
Me.TAutor.SetFocus
Exit Sub
Else
JAutor = Me.TAutor
End If
If IsNull(Me.TTytul) Then
MsgBox “Brak tytułu”, vbCritical, “Brak wymaganych danych”
Me.TTytul.SetFocus
Exit Sub
Else
JTytul = Me.TTytul
End If
If IsNull(Me.TDzial) Then
MsgBox “Przypisz dział”, vbCritical, “Brak wymaganych danych”
Me.TDzial.SetFocus
Exit Sub
Else
JDzial = Me.TDzial
End If
JCena = Nz(Me.TCena, 0)
JDataP = Nz(Me.TData, Date)
JBest = Nz(Me.TBestseller, False)
Kwera = “INSERT INTO TabelaKsiazki ( Autor, Tytul, Dzial, Cena, DataP, Bestseller ) ” & _
“SELECT ‘” & JAutor & “‘ AS Wyr1, ‘” & JTytul & “‘ AS Wyr2, ” & JDzial & ” AS Wyr3, ” & JCena & ” AS Wyr4, #” & JDataP & “# AS Wyr5, ” & JBest & ” AS Wyr6;”
DoCmd.SetWarnings False
DoCmd.RunSQL Kwera
DoCmd.SetWarnings True
DoCmd.Close
End Sub

Moją ulubioną metodą dopisywania rekordów jest natomiast Recordset i Add.New. To już jednak temat na zupełnie oddzielną  notkę.

 

Niezdefiniowany typ danych

User-defined type not defined

Niezdefiniowany typ danych użytkownika – błąd kompilacji spowodowany użyciem nieznanego typu danych.

Z czego może to wynikać? Często to zwykła literówka w nazwie typu danych – wystarczy drobna poprawka. Najczęściej to jednak brak odpowiedniej biblioteki, do uzupełnienia w referencjach.
Manu edytora VBA –> Tools –> References

Aktywne (czyli przyłączone do projektu) są te referencje, które mają zaznaczony checkbox z lewej strony.

Oprócz tego na liście są wypisane w kolejności alfabetycznej pozostałe dostępne referencje. Chcąc dołączyć którąś z referencji do projektu – wystarczy zaznaczyć przy niej checkbox i nacisnąć przycisk OK.

Na przykład w aplikacji wykorzystującej Microsoft Word:

W tym przypadku edytor VBA zaznaczył błąd w linii Word.Application, konieczne jest wyszukanie i dołączenie potrzebnej referencji.

Po jej dołączeniu – kompilacja kodu przebiega już bez problemów, a kod jest prawidłowo wykonywany.


Kurs Access - programowanie w VBA

 

Missing czyli brak referencji

Błąd kompilacji – Can’t find project or library

Błąd ten pojawia się w sytuacji, gdy brakuje referencji. Można to sprawdzić edytorze VBA. Wybieramy w menu Tools –> References:

Brakujące pozycje oznaczone są jako Missing.

Jak pozbyć  się błędu? Trzeba po prostu odhaczyć występujący przy nim checkbox, a następnie nacisnąć OK i skompilować program.


 

Błąd wykonania 75

Błąd wykonania 75 – Path/File access error

Błąd ten pojawia się w sytuacji, gdy następuje odwołanie do pliku lub folderu, który nie istnieje. Wystąpi także przy próbie utworzenia folderu, który już jest zapisany.
Najlepszym zabezpieczeniem kodu jest tu po prostu wcześniejsze sprawdzenie, czy dany plik/folder istnieje.
Przykładowy kod może wyglądać tak:

Public Sub NowyKatalog()
If Dir(“C:\ABCD”, vbDirectory) = “” Then   ‘(1)
   MkDir (“C:\ABCD”)   ‘(2)
End If`  ‘(3)
End Sub

W linii (1) następuje sprawdzenie, czy istnieje katalog. Jeżeli nie – następuje przejście do linii (2), jeżeli tak – do (3).

Inne błędy wykonania VBA (Run-time) są tu:
Błędy wykonania VBA