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).
Funkcja DIR() to funkcja VBA zwracająca wartość tekstową będącą nazwą pliku lub folderu. Bardzo pożyteczna i często stosowana.
Argumenty funkcji to:
PathName– wartość tekstowa odpowiadająca pełnej nazwie pliku lub folderu
Attributes – wartość stała lub liczbowa określająca wyszukiwane pliki. Składa się ona z sumy wartości liczbowych z tabeli poniżej.
Atrybuty mogą przyjmować wartości:
Stała
Wartość liczbowa
Opis
vbNormal
0
Pliki bez właściwości. Wartość domyślna.
vbReadOnly
1
Pliki bez właściwości i pliki tylko do odczytu
vbHidden
2
Pliki bez właściwości i pliki ukryte
vbSystem
4
Pliki bez właściwości i pliki systemowe
vbVolume
8
Etykiety
vbDirectory
16
Foldery
W praktycznym wykorzystaniu funkcja Dir najczęściej stosowana jest do sprawdzania czy istnieje dany folder lub plik oraz do sporządzania listy takich plików.
Moduły VBA w aplikacji Access to obiekty VBA, w których są zapisane wszystkie procedury i funkcje stworzone w kodzie VBA.
Dwukrotne kliknięcie w moduł powoduje automatyczne przejście do okna eksploatora projektu. Oczywiście można tam wejść również poprzez przycisk w grupie opcji Makra i kod na karcie Tworzenie czy też naciśnięcie przycisków Alt+F11.
Każdy z obiektów Accessa typu formularz czy raport ma swój własny moduł, w którym są zapisywane wszystkie zdarzenia z nim związane. Oprócz tego w projekcie są moduły ogólne, do których trafiają wszystkie przekonwertowane makra. Moduły ogólne mogą być też wstawiane poprzez menu edytora VBA:
Wykorzystując kod VBA – możliwości jest już naprawdę mnóstwo. Nawet sam Microsoft zaleca konwersję makr na kod VBA. Warto.
Jak szybko skopiować dowolny plik? Sposobów jest kilka, jednym z nich jest wykorzystanie obiektu FileSystem.Object.
Służy do tego metoda FileSystem.Object.Copy Ma ona kilka parametrów wejściowych:
Object – nazwa obiektu zdefiniowanego jako obiekt FSO. Argument obowiązkowy.
Source – nazwa pliku do skopiowania. Argument obowiązkowy, ale dozwolone są znaki zastępcze w nazwie.
Destination – nazwa pliku po skopiowaniu. Argument obowiązkowy.
Overwrite – opcjonalny argument typu Boolean. Jeżeli kopiowany plik ma być zapisany pod nazwą już istniejącego pliku, wartość False nie skopiuje pliku. Domyślna wartość True, zastąpi plik plikiem kopiowany.
Przykładowy kod kopiujący plik może wyglądać tak:
Public Sub KopiujPlik() Dim FSO As Object Dim KopiowanyPlik As String
Dim NowyPlik As String
KopiowanyPlik= “C:\Wprawki\PrzykladowaBaza.accdb”
NowyPlik= “C:\NaBlogi\PrzykladowaBaza.accdb” Set FSO=CreateObject(“Scripting.FileSystemObject”)
FSO.Copy KopiowanyPlik, NowyPlik, True
Set FSO=Nothing End Sub
Scripting.FileSystemObject to obiekt służący do zarządzania plikami i folderami. Wprawdzie w kodzie VBA są dostępne proste i przyjemne funkcje Dir, MkDir itp., ale przy odwołaniach do folderów sieciowych niestety często zawodzą. Wówczas pozostaje wykorzystanie właśnie obiektu FileSystemObject, popularnie nazywanym FSO.
Jak z poziomu aplikacji otworzyć określony folder na dysku? Sposobów jest kilka, jeden z nich to wykorzystanie funkcji Shell.
Public Sub OtworzFolder() Dim a Dim JSciezka As String
JSciezka = “C:\CWICZENIAFORA”
a = Shell(“explorer.exe ” & JSciezka, vbNormalFocus) End Sub
Po uruchomieniu kodu w aplikacji Access – w oddzielnym oknie Windows otwiera się folder zdefiniowany w zmiennej JSciezka, a kod VBA przechodzi do kolejnego kroku.
Funkcja VBA Shell to funkcja uruchamiająca inny program wykonywalny.
Ma 2 argumenty wejściowe:
PathName – argument obowiązkowy. Wartość typu String określająca nazwę programu do otwarcia;
WindowStyle – argument opcjonalny. Wartość typu Integer określająca widok okna uruchomionego programu.
Dostępne są tu następujące wartości:
0 (vbHide) – okno uruchomionego programu jest ukryte
1 (vbNormalFocus) – okno uruchomionego programu jest widoczne i ma fokus
2 (vbMinimizedFocus) – okno uruchomionego programu jest widoczne jako ikona i ma fokus
3 (vbMaximizedFocus) – okno uruchomionego programu jest maksymalnie powiększone i ma fokus
4 (vbNormalNoFocus) – okno uruchomionego programu jest widoczne, ale nie ma fokusu
6 (vbMinimizedNoFocus) – okno uruchomionego programu jest widoczne jako ikona i nie ma fokusu
Wartością domyślną jest tu 1 (vbNormalFocus)
W wyniku działania funkcji VBA otrzymujemy wartość typu Variant będącą identyfikatorem numeru zadania uruchomionego programu. Jeżeli uruchomienie programu się nie powiedzie – zwracana jest wartość 0.