
Lekcja 5. Dodanie wydarzenia kalendarzowego do wiadomości e-mail
tagi: email, wiadomość, kalendarz, wydarzenie, dodawanie, lekcja
0 komenarze | Dodaj komentarz
W lekcji piątej chcę opisać rozwiązanie pozwalające na umieszczenie obiektu typu „wydarzenie kalendarzowe” w wiadomości email. Przydatność takiego działania może wiązać się z chęcią poinformowania odbiorcy wiadomości o wydarzeniu.
Możemy przyjąć, że masz email jest elementem strategii marketingowej, a umieszczenie w nim załącznika tego typu sprawi, że zainteresowana wydarzeniem osoba będzie w łatwy sposób mogła dodać je w swoim Outlooku (bez konieczności deklaracji obecności czy odpowiedzi na zaproszenie). Ponieważ wiadomość przygotowywana jest w formie załącznika, jej treść może być przygotowana charakterystycznie co do stylu i preferencji nadawcy.
Artykuły z serii „lekcja” przedstawiają propozycje przygotowania narzędzia i umożliwiają prostą implementację interfejsu po przez (pobranie gotowego interfejsu) i zaimportowanie w środowisku developera kodu VBA. Po rozpakowaniu pobranego pliku należy osadzić go na miejsce drzewa projektu (analogicznie jak przedstawiono to w wersjach poprzednich).

Rys.1. Interfejs programu tworzącego przypomnienie o wydarzeniu.
Option Explicit On
Private Sub Anuluj_Click()
Unload(Me)
End Sub
Private Sub DTPicker1_Change()
Call wlacz_wstaw()
End Sub
Private Sub Godzina_do_Change()
If Format(Godzina_od.text, "HH") > Format(Godzina_do.text, "HH") Then _
Godzina_od.text = Godzina_do.text
End Sub
Private Sub Godzina_od_Change()
If Format(Godzina_od.text, "HH") > Format(Godzina_do.text, "HH") Then _
Godzina_do.text = Godzina_od.text
End Sub
Private Sub Przypomnienie_ustaw_Click()
If Przypomnienie_ustaw.value = True Then
Przypomnienie.Enabled = True
Else
Przypomnienie.Enabled = False
End If
End Sub
Private Sub Sala_Change()
Call wlacz_wstaw()
End Sub
Private Sub Temat_Change()
Call wlacz_wstaw()
End Sub
Private Sub wlacz_wstaw()
If Len(Trim(Temat.text)) > 0 And Len(Trim(Sala.text)) > 0 And _
Format(DTPicker1.value, "YYYY-MM-DD") >= Format(Now, "YYYY-MM-DD") Then
Wstaw.Enabled = True
Else
Wstaw.Enabled = False
End If
End Sub
Private Sub UserForm_Initialize()
DTPicker1.value = Now
Dim x&
For x = 0 To 240
Przypomnienie.AddItem(x)
x = x + 9
Next x
Przypomnienie.ListIndex = 0
For x = 8 To 21
Godzina_od.AddItem(x & ":00")
Godzina_od.AddItem(x & ":30")
Godzina_do.AddItem(x & ":00")
Godzina_do.AddItem(x & ":30")
Next x
Godzina_od.text = Format(Now, "HH") & ":00"
Godzina_do.text = Format(Now, "HH") & ":00"
Call listLocation()
End Sub
Private Sub listLocation()
Dim colCalendar As Outlook.Items, aItems As AppointmentItem, NoDupes As New Collection, _
x&, jest As Boolean, i&, j&, Swap1, Swap2, item
colCalendar = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderCalendar).Items
For Each aItems In colCalendar
DoEvents()
jest = False
If Len(Trim(aItems.LOCATION)) = 0 Then GoTo nastepny
If NoDupes.Count = 0 Then NoDupes.Add(aItems.LOCATION)
For x = 1 To NoDupes.Count
If UCase(NoDupes(x)) = UCase(Trim(aItems.LOCATION)) Then jest = True
Next x
If jest = False Then NoDupes.Add(Trim(aItems.LOCATION))
nastepny:
Next
For i = 1 To NoDupes.Count - 1
For j = i + 1 To NoDupes.Count
If NoDupes(i) > NoDupes(j) Then
Swap1 = NoDupes(i)
Swap2 = NoDupes(j)
NoDupes.Add(Swap1, before:=j)
NoDupes.Add(Swap2, before:=i)
NoDupes.Remove(i + 1)
NoDupes.Remove(j + 1)
End If
Next j
Next i
For Each item In NoDupes
Sala.AddItem(item)
Next item
End Sub
Private Sub Wstaw_Click()
Dim F&, file$, Katalog$, strDestFolderPath$
F = FreeFile
Katalog = "C:\Temp"
On Error Resume Next
MkDir(Katalog)
On Error GoTo 0
strDestFolderPath = Katalog & "\" & "Przypomnienie.ics"
If FileExists(strDestFolderPath) = True Then Kill(strDestFolderPath)
Open strDestFolderPath For Output As #F
Print #F, "BEGIN: VCALENDAR"
Print #F, "BEGIN: VEVENT"
Print #F, "DTSTART:" & Format(DTPicker1.value, "YYYYMMDD") & _
"T" & Replace(Godzina_od.text, ":", vbNullString) & "00"
Print #F, "DTEND:" & Format(DTPicker1.value, "YYYYMMDD") & _
"T" & Replace(Godzina_do.text, ":", vbNullString) & "00"
Print #F, "SUMMARY: " & Trim(Temat.text)
Print #F, "LOCATION: " & Trim(Sala.text)
Print #F, "DESCRIPTION; ENCODING=QUOTED-PRINTABLE:" & _
Replace(Info.text, xhr(13) & xhr(10), "=0D=0A=0D=0A") & "=0D=0A=0D=0A"
If Przypomnienie_ustaw.value = True Then
Print #F, "BEGIN: VALARM"
Print #F, "TRIGGER:-PT" & Przypomnienie.text & "M"
Print #F, "ACTION: Display"
End If
Print #F, "DESCRIPTION: Reminder"
Print #F, "End: VALARM"
Print #F, "End: VEVENT"
Print #F, "End: VCALENDAR"
Close #F
If FileExists(strDestFolderPath) = True Then
Dim olMail As MailItem
olMail = Application.ActiveInspector.CurrentItem
olMail.Attachments.Add(strDestFolderPath)
olMail = Nothing
End If
Unload(Me)
End Sub

Rys.2. Podłączenie przypomnienia do emaila.
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.
