W poprzednich częściach cyklu poświęconego automatyzacji najpopularniejszych aplikacji pakietu Microsoft Office 2000 przedstawiliśmy proste przykłady zastosowania tej techniki. Teraz zajmiemy się bardziej złożonymi procedurami, obejmującymi swym działaniem także więcej niż dwa programy pakietu biurowego Microsoftu.
C
zas oprogramować trzeci element naszej bazy danych – budżet osobisty. Jest on bardzo prostą kartoteką wydatków i przychodów, powiązaną zarówno z modułem hobby (np. poprzez datę zakupu albumu), jak i z modułem danych osobowych (np. poprzez wspólną listę kategorii).
Lista zakupionych płyt
Pierwszy program, który przedstawimy, będzie wysyłał zawiadomienie o zakupionych przez nas nowych albumach do osób, których zainteresowania (określone na podstawie informacji z bazy kontaktów) obejmują nowo zakupione płyty (dokładnie gatunki, do których należą płyty, np. rock, jazz lub blues). Samo zawiadomienie będzie miało postać listy utworów wraz z nazwami albumów i zostanie przygotowane w Wordzie, tak aby można je było dowolnie zmodyfikować za pomocą tego edytora. Na samym początku musimy także zdecydować, czy chcemy za każdym razem wysyłać zawiadomienie o wszystkich kupionych albumach czy też tylko o tych, które nabyliśmy w ciągu ostatnich np. trzech miesięcy. Ten ostatni przypadek wydaje się mieć najbardziej praktyczne zastosowanie. Tworzymy zatem nowy formularz o nazwie BO – Nowe albumy, a w nim pole Od daty zakupu, któremu nadamy wartość domyślną:
“=Date () -90”
. Dzięki temu proponowana domyślnie data będzie o trzy miesiące (dokładniej o 90 dni) wcześniejsza. W tym samym formularzu tworzymy przycisk Wyślij informacje o nowych albumach i projektujemy procedurę zdarzenia Przy kliknięciu. Tworzenie kodu tradycyjnie rozpoczynamy od zadeklarowania wymaganych zmiennych (
dbs
jako baza danych,
rst
jako zestaw rekordów). Następnie deklarujemy zmienne określające obiekty aplikacji Worda i Outlooka oraz list elektroniczny:
Z poziomu głównego okna naszej aplikacji możemy uzyskać dostęp do wszystkich procedur opisanych w ramach cyklu. |
'Baza danych Dim dbs As Database 'Zestaw rekordów Dim rst As Recordset 'Word Dim appWord As Word.Application 'Outlook Dim appOutlook As Outlook.Application 'List elektroniczny Dim eml As MailItem
Dodatkowo zadeklarujemy zmienną przechowującą identyfikator osoby lngOsobaID oraz nazwy albumu strAlbum. Ponadto wprowadzamy stałą o nazwie strFolder, przechowującą informację o domyślnej lokalizacji plików tymczasowych. Procedurę rozpoczynamy sprawdzeniem, czy w formularzu została podana data.
If IsNull(Me![PoleData]) Then MsgBox "Wpisz w polu poprawną datę.", vbInformation + vbOKOnly, Me.Caption Me![PoleData].SetFocus Else...
Jeśli jej nie podano (czyli funkcja
IsNull ([PoleData])
) zwróci wartość
True
), program wyświetli stosowny komunikat oraz przeniesie kursor do formantu PoleData. Jeśli data została wprowadzona, inicjujemy zmienną dbs oraz otwieramy kwerendę BO – Nowe albumy, filtrując ją tak, żeby zostały wyświetlone jedynie te rekordy, dla których data dokonania zakupu jest większa niż data podana na formularzu. Należy zwrócić tutaj uwagę na właściwe sformatowanie wartości formantu
PoleData
:
Format$(Me![PoleData], "mm/dd/yyyy")
Źródłem kłopotów może być fakt, że w formularzu data zostanie wprowadzona według stylu zgodnego z ustawieniami regionalnymi (dla Polski może to być 31.10.1999), natomiast na potrzeby otworzenia zestawu rekordów Visual Basic domyślnie posługuje się formatem amerykańskim (wspomniana data miałaby postać 10/31/1999). Jeżeli kwerenda nie będzie zawierała żadnego rekordu spełniającego warunek daty, zostanie wtedy wyświetlony stosowny komunikat. Dopiero teraz uruchamiamy Worda. Dalszy fragment programu jest bardzo podobny do wcześniej opisywanego kodu, umożliwiającego uzyskanie listy utworów w Wordzie. Dlatego nie będziemy go tutaj szczegółowo omawiać, a zaakcentujemy jedynie różnice. Podstawową jest ta, że teraz sprawdzamy także identyfikator osoby (przechowywany w zmiennej
lngOsobaID
).
If lngOsobaID <> rst("OsobaID") Then... appWord.Documents.Add lngOsobaID = rst("OsobaID") End If
W przypadku jego zmiany (oznacza to, że kolejne rekordy będą dotyczyć już innej osoby) należy zakończyć rozpoczętą listę, zachować dokument na dysku (domyślnie zapisujemy go w katalogu określonym poprzez stałą
strFolder
) i zamknąć istniejący dokument. Wszystko to trzeba wykonać, jeśli dokument został wcześniej otwarty – możemy to sprawdzić porównując zmienną lngOsobaID z zerem. Następnie należy utworzyć nowy, pusty dokument. Druga różnica występuje po zakończeniu przepisywania listy utworów i polega na tym, że przed wyjściem z Worda musimy zachować na dysku aktywny dokument, po czym go zamknąć. Po wykonaniu tych wszystkich czynności na dysku powinny być zapisane oddzielne dokumenty dla każdej osoby, do której chcemy wysłać pocztę elektroniczną.
Teraz możemy wysłać przygotowane dokumenty do adresatów. Podobnie jak w procedurze opisywanej w poprzedniej części kursu, otwieramy Outlooka, a następnie dla każdej osoby tworzymy list elektroniczny, używając instrukcji:
Set eml = appOutlook. CreateItem(olMailItem)
Nadajemy tytuł, wpisujemy treść listu oraz wyszukujemy w bazie adres elektroniczny osoby, do której chcemy wysłać list, i dodajemy ją do listy adresatów:
.Recipients.Add (DLookup ("AdresEmail", "Osoba", "ID = " & rst("OsobaID")))
Pozostało nam teraz dodać zapisany na dysku dokument Worda jako załącznik:
.Attachments.Add strFolder & "Info" & rst("OsobaID") & ".doc"
i możemy wysłać tak przygotowany list, wywołując metodę Send, lub zapisać go na dysku, korzystając z metody Save, by móc później sprawdzić, które listy już wysłaliśmy.
Pewnym mankamentem przedstawionego tutaj rozwiązania jest konieczność zapisania dokumentów Worda na dysku przed ich wysłaniem. Należy jednak zwrócić uwagę na to, że wysłanie danych w innej formie niż plik (np. jako obiektu wstawionego za pomocą mechanizmu OLE) może spowodować utrudnienia w jego poprawnym odczytaniu przez adresata – oprogramowanie adresata może nie obsługiwać OLE (np. systemy uniksowe).
—
INFO Grupa dyskusyjna Pytania, uwagi i komentarze do artykułu: # Pytania techniczne dotyczące zagadnień poruszanych w tekście: # Internet Strona poświęcona VBA http://msdn.microsoft.com/vba/ Strona dla firm tworzących oprogramowanie w VBA http://msdn.microsoft.com/vba/ISV/default.asp Dokumentacja produktów Microsoftu, m.in. VBA http://msdn.microsoft.com/library/default.htm Dokumentacja Microsoft Office http://www.microsoft.com/office/index.htm Literatura Microsoft Office 2000/Visual Basic Programmer’s Guide, Microsoft Press 1999 Microsoft Office 2000 Object Model Guide, Microsoft Press 1999 Automaty w biurze cz. I, CHIP 12/99, s. 242 Automaty w biurze cz. II, CHIP 1/2000, s. 190 Na CHIP-CD w dziale Software | Automatyzacja Office’a znajduje się aplikacja opisana w ramach cyklu |