Tworząc w VBA nawet proste skrypty dość często zachodzi potrzeba zapisania gdzieś pewnych danych konfiguracyjnych. Przykładowo niedawno pisałem aplikację dla zaprzyjaźnionego biura rachunkowego do wysyłania informacji o wysokości obliczonych podatków do klientów.
I tutaj wpadłem na pomysł że można w Outlooku zapisać wiadomość z opóźnioną wysyłką (np. 15 minut) aby w razie gdyby księgowa źle coś kliknęła można było usunąć wiadomości ze skrzynki nadawczej; albo sprawdzić czy wiadomości zostały poprawnie wygenerowane.
Z czasem jak wszystko jest OK księgowa mogłaby chcieć ustawić, aby od teraz nowe wiadomości wychodziły natychmiast.
Jak najprościej zapisać dowolne ustawienie? Otóż dawniej tworzyłem proste pliki INI w których zapisywałem ustawienia. Ale tutaj jest masa roboty: należy zapisać plik w odpowiednim folderze, przy odczytywaniu sprawdzić czy plik istnieje (jeśli nie to załadować jakieś domyślne ustawienia), odpowiednio parsować plik przy odczytywaniu ustawień. Na szczęście mamy w VBA 2 wygodne instrukcje do zapisu (i odczytu) danych z rejestru systemu Windows.
Aby zapisać daną zmienną można napisać taki fragment kodu:
SaveSetting "PROGRAM", "PODFOLDER", "NAZWA ZMIENNNEJ", "WARTOŚĆ"
Np.
SaveSetting "Abakus", "Ustawienia", "Opóźnienie", "20"
Po wywołaniu tej instrukcji w rejestrze systemu w gałęzi: HKEY_CURRENT_USER\Software\VB and VBA Program Settings\ zostanie utworzony nowy folder (gałąź) o nazwie Abakus a w nim podfolder o nazwie Ustawienia, gdzie pojawi się klucz o nazwie Opóźnienie i przypisanej wartości 20. Ponowne wywołanie tej instrukcji oczywiście nadpisze wartość tego klucza w rejestrze. Może to zabrzmiało nieco skomplikowanie, ale myślę, że ten zrzut ekranu z programu regedit.exe wszystko wyjaśni:
A jak odczytać taką wartość? Równie prosto:
Opóźnienie = GetSetting("Abakus", "Ustawienia", "Opóźnienie", 0)
Czyli do zmiennej o nazwie Opóźnienie odczytujemy wartość klucza Opóźnienie, która znajduje się w gałęzi Abakus\Ustawienia. Jeśli taki klucz nie istnieje to zostanie do zmiennej przypisana wartość domyślna 0 (czwarty argument instrukcji GetSetting).
Uwaga: instrukcje SaveSetting i GetSetting zapisują dane w rejestrze systemu Windows tylko w gałęzi: HKEY_CURRENT_USER\Software\VB and VBA Program Settings. Niestety ale za ich pomocą nie możemy modyfikować dowolnej wartości w dowolnym miejscu w rejestrze systemu Windows co jest pewną wadą, z drugiej strony dzięki temu ograniczeniu te instrukcje mają dość prostą składnię.
Test komentarza bez podania imienia