Import danych oraz aktywacja przypomnień dla terminów po imporcie z MS Excel
by vbatools on Jun.21, 2010, under Excel, Outlook, Porady
MS Outlook pozwala zaimportować większą ilość terminów do kalendarza dzięki utworzonej wcześniej bazie danych w programie Excel.
Aby przystąpić do pracy należy wyselekcjonować dane, jakie będą istotne do utworzenia obiektu kalendarzowego.
Poniższy rysunek pokazuje przykładową bazę elementów (arkusz: Dane), jakie wykorzystamy przy imporcie do Outlooka.
Rys 1. Przykładowa baza danych do importu jako obiekty kalendarza
Poniżej przykład uporządkowanego obszaru bazy, np. wielkości tablicy „A:J” (od Temat do Opis). Pola nazw kolumn zgodne z importem rozumianym przez Outlooka to:
Temat, Datarozpoczęcia, Czasrozpoczęcia, Datazakończenia, Czaszakończenia, Przypomnienie wł/wył, Dataprzypomnienia, Czasprzypomnienia, Kategorie, Opis
Rys 2. Przygotowanie linii – odpowiedniki nowych obiektów
Warunkiem koniecznym do prawidłowego importu jest nadanie obszaru roboczego o nazwie Kalendarz (arkusz: Outlook).
W przypadku, kiedy nasza baza zwiększa swoją objętość, aktualizacje obszaru możemy realizować za pomocą poniższej instrukcji umieszczonej w module Excela:
Dim oName As Name
For Each oName In ActiveWorkbook.Names
If oName.Name = “Kalendarz” Then oName.Delete
Next
ActiveWorkbook.Names.Add Name:=”Kalendarz”, _
RefersTo:=Range(“A1:J” & Cells(Rows.Count, “A”).End(xlUp).Row)
Jeśli już posiadamy jasno określoną matrycę, przystępujemy do importu danych w Outlooku. Przedtem należy wyjść z pliku bazy danych (zamknąć plik Excela). Mechanizm importu możemy znaleźć w Outlooku: Menu/Plik/Importuj lub eksportuj/Import z innego programu lub pliku/Microsoft Excel.
Wybieramy plik oraz stosowną opcję metody importu.
Wskazujemy folder kalendarza (może to być dowolny folder, inny niż domyślny, o właściwościach kalendarza).
Możemy określić inne pola importu, jednakże powyższy przykład bazy zawiera większość stosowanych.
Niestety import ten posiada jedną wadę. Pozbawiony jest prawidłowego odczytu pola: Przypomnienie wł/wył = PRAWDA, pomimo prawidłowego wskazania. W przypadku umieszczenia anglojęzycznej nazwy parametru pola otrzymujemy identyczny skutek.
Powyższy rysunek nie zawiera zaznaczonego przypomnienia, choć w chwili importu data przypomnienia była wcześniejsza niż data importu danych.
Istnieje ręczna metoda, polegająca na ustawieniu widoku kalendarza: Widok/Widok bieżący/Wszystkie terminy lub Widok/Rozmieść wg/Kategorie i przy wyciągnięciu nowej kolumny Przypomnienie, jest możliwość naciśnięcia w jego puste pole (pojawi się dzwoneczek) oznaczający jego nadanie w dacie i godzinie terminu.
Wyciągnięcie kolumny realizujemy poprzez prawy klik na pasku nazw kolumn/Wybór pola/Przenosimy przytrzymując myszą nazwę kolumny Przypomnienie i puszczając przycisk w odpowiednim miejscu.
Napotykamy na problemem, gdy ilość kliknięć jest równa np. 100 lub więcej. Praca taka wydaje się zbyt mozolna, zwłaszcza mając na uwadze cykliczność naszych działań.
Aby temu zaradzić i proces ten zautomatyzować, należy użyć poniżej napisanej procedury, która zbada czy przypomnienie terminów zaimportowanych do Outlooka jest aktualne w dacie. Wszystkie takie obiekty uaktualni, dodając „dzwoneczek” (włączy dla tych obiektów przypomnienie). Uniwersalność procedury pozwala umieścić ją zarówno w module Outlooka, jak i Excela (w Excelu należy w Referencjach dodać bibliotekę Oulooka Menu/Tools/References -> Microsoft Outlook …Object libary).
Option Explicit
Sub wlaczanie_przypomninia()
'MVP OShon from VBATools.pl
Dim msg$, Response$, q&
msg = "Procedura włączenia przypomnień do terminów w kalendarzu Outlooka" & vbCr & vbCr _
& "Aby kontynuować naciśnij ''Tak''" & vbCr _
& "Aby anulować operacje naciśnij ''Nie''"
On Error GoTo blad
Response = MsgBox(msg, vbYesNo + vbExclamation + vbDefaultButton2, " Aktualizacja dzwoneczków")
If Response = vbYes Then
Dim OutApp As Object
Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.Logon
Dim oApptFolder As MAPIFolder
Set oApptFolder = OutApp.Application.GetNamespace("MAPI").GetDefaultFolder(olFolderCalendar)
Dim oCalendar As AppointmentItem
Dim olApp As Items
Set olApp = oApptFolder.Items
For q = 1 To olApp.Count
DoEvents
Set oCalendar = olApp.Item(q)
If Not oCalendar.Categories = "" _
And oCalendar.ReminderSet = False _
And oCalendar.Start >= Now Then
'Jeśli nie określimy nazwy dla kategorii należy zmienić pow. warunek.
oCalendar.ReminderSet = True
oCalendar.Save
End If
Set oCalendar = Nothing
Next q
MsgBox "Dzwoneczki uaktywnione!", vbInformation, "O'Shon machine from VBATools."
Set OutApp = Nothing
Set oApptFolder = Nothing
End If
Exit Sub
blad:
MsgBox "Błąd: " & Err.Number & vbCr & Err.Description, vbExclamation
End Sub
Jeśli automat zainteresuje się naszymi terminami, dla których przypomnienie miało nastąpić o wiele wcześniej, niż data wydarzenia kalendarzowego, należy anulować potwierdzenie przypomnienia naciskając: Odrzuć wszystkie.
W kalendarzu Outlooka pozostaną tylko te, co do których termin przypomnienia będzie skutkował komunikatem w nadanym, aktualnym terminie.
(c) Shon Oskar – www.VBATools.pl
Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.