Jak sprawdzić gdzie jest zainstalowany Access (lub Outlook)

przez | 2024-06-30

Jedną z rzeczy, które mnie denerwują w VBA to jest brak 100% pokrycia metod i właściwości w obiekcie Application. Przykładowo jeśli chciałbym się dowiedzieć w jakim folderze jest zainstalowany Word, Excel lub PowerPoint to mógłbym użyć instrukcji:

MsgBox Application.Path 

I to wszystko. Niestety, ale ani w programie Access ani w Outlook obiekt Application nie posiada właściwości Path. A czasami chcemy z jakiegoś powodu wiedzieć w jakim folderze mamy zainstalowany dany program. Na szczęście znalazłem ciekawy trik.

Oto prosta funkcja dla Outlooka:

Function Application_Path()
    Dim WshShell As Object
    
    Set WshShell = CreateObject("WScript.Shell")
    On Error Resume Next
    Application_Path = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\OUTLOOK.EXE\Path")
    On Error GoTo 0
End Function

A oto wersja dla programu Access:

Function Application_Path()
    Dim WshShell As Object
    
    Set WshShell = CreateObject("WScript.Shell")
    On Error Resume Next
    Application_Path = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\MSACCESS.EXE\Path")
    On Error GoTo 0
End Function

Jak widzisz różnica jest jedynie taka, że odczytujemy zawartość innego klucza z rejestru. O co tutaj chodzi? Otóż w kluczu:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

Niektóre programy zapisują tworzą klucz o nazwie NAZWA_PLIKU.EXE (np. OUTLOOK.EXE, MSACCESS.EXE itp.) W tym kluczu znajduje się wartość ciągu o nazwie Path, która zawiera nazwę folderu w którym ten plik się znajduje. Jest to przydatne dla systemu operacyjnego oraz innych aplikacji, które mogą potrzebować uruchomić dany program lub uzyskać dostęp do jego pliku wykonywalnego.

Wskazówka: wielkość liter nie ma znaczenia, więc czy napiszesz w funkcji msaccess.exe czy MSACCESS.EXE to i tak uzyskasz ścieżkę do danego pliku (o ile istnieje taki wpis w rejestrze)

Uwaga: jeśli w rejestrze nie ma danego klucza (nie każda aplikacja zapisuje „swoje namiary”) w tym kluczu w rejestrze, albo popełnisz literówkę w nazwie pliku (np. ja w pierwszej wersji wpisałem odruchowo access.exe a nie msaccess.exe) to funkcja Application_Path zwróci pusty ciąg znaków!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.