VBATools

Import danych oraz aktywacja przypomnień dla terminów po imporcie z MS Excel

by 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.

:, , , ,

Leave a Reply

Recently Active Members

Profile picture of vbatools
Profile picture of Joanna Subik
Profile picture of Karol Stilger
Profile picture of Anorak
Profile picture of marcinmachalowski
Profile picture of programistaaccess
Profile picture of piotrpawlik
Profile picture of Emil Wasilewski
Profile picture of kicekpicek
Profile picture of coldfusion
Profile picture of Gosia Borzęcka
Profile picture of lukaszch
Profile picture of itadministracja
Profile picture of farbenia
Profile picture of Łukasz Kałużny
Profile picture of kabzinski
Profile picture of rtynski
Profile picture of leszekbetlinski
Profile picture of Iv
Profile picture of Justyna Spychała