Automaty w biurze cz. III

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
Więcej:bezcatnews