Следующий макрос работал до обновления до Microsoft Office Professional Plus 2013.
Предыдущая полная функциональность этого макроса:
Предварительное условие:
Для каждого из действий (FlagDayAfterTomorrow
, FlagNextWeek
и c.) Я создаю значок на панели быстрого доступа Microsoft Outlook.
Для уже отправленного / полученного электронного письма я нажимаю на один из значков ссылки и происходят две вещи:
- Почта помечается как элемент задачи с датой обращения
- В дату обращения и в определенный час, когда письмо появляется в окно напоминания.
В Microsoft Office Professional Plus 2013 работает только номер 1. Напоминание не появляется.
Что мне нужно сделать, чтобы # 2 работал с этой версией Outlook?
'**********************************************************
'Declarations section of the module
'**********************************************************
' Option Explicit
Public Enum FlagWhatEnum
flNextWeek = 0
flThisEvening = 1
flTomorrow = 2
flDayAfterTomorrow = 3
End Enum
Public Sub FlagNextWeek()
FlagItem flNextWeek
End Sub
Public Sub FlagThisEvening()
FlagItem flThisEvening
End Sub
Public Sub FlagTomorrow()
FlagItem flTomorrow
End Sub
Public Sub FlagDayAfterTomorrow()
FlagItem flDayAfterTomorrow
End Sub
Public Sub FlagItem(FlagWhat As FlagWhatEnum)
Dim Mail As Outlook.MailItem
Dim obj As Object
Dim Sel As Outlook.Selection
Dim Item As Object
Dim i&
Dim dt As Date
Dim tm As String
Dim Icon As OlMarkInterval
Select Case FlagWhat
Case flNextWeek
dt = DateAdd("d", 7, Date)
tm = CStr(dt) & " 15:00"
Icon = olMarkNextWeek
Case flThisEvening
dt = Date
tm = CStr(dt) & " 15:00"
Icon = olMarkToday
Case flTomorrow
dt = DateAdd("d", 1, Date)
tm = CStr(dt) & " 15:00"
Icon = olMarkTomorrow
Case flDayAfterTomorrow
dt = DateAddW(Date, 2)
tm = CStr(dt) & " 15:00"
Icon = olMarkDayAfterTomorrow
End Select
Set obj = Application.ActiveWindow
If TypeOf obj Is Outlook.Explorer Then
Set Sel = obj.Selection
For i = 1 To Sel.Count
Set obj = Sel(i)
If TypeOf obj Is Outlook.MailItem Then
Set Mail = obj
Mail.MarkAsTask Icon
Mail.TaskStartDate = tm
Mail.TaskDueDate = tm
Mail.Save
End If
Next
Else
Set obj = obj.CurrentItem
If TypeOf obj Is Outlook.MailItem Then
Set Mail = obj
Mail.MarkAsTask olMarkNextWeek
Mail.TaskStartDate = tm
Mail.TaskDueDate = tm
Mail.Save
End If
End If
End Sub
' https://support.microsoft.com/en-us/kb/115489
'==========================================================
' The DateAddW() function provides a workday substitute
' for DateAdd("w", number, date). This function performs
' error checking and ignores fractional Interval values.
'==========================================================
Function DateAddW(ByVal TheDate, ByVal Interval)
Dim Weeks As Long, OddDays As Long, Temp As String
If VarType(TheDate) <> 7 Or VarType(Interval) < 2 Or _
VarType(Interval) > 5 Then
DateAddW = TheDate
ElseIf Interval = 0 Then
DateAddW = TheDate
ElseIf Interval > 0 Then
Interval = Int(Interval)
' Make sure TheDate is a workday (round down).
Temp = Format(TheDate, "ddd")
If Temp = "Sun" Then
TheDate = TheDate - 2
ElseIf Temp = "Sat" Then
TheDate = TheDate - 1
End If
' Calculate Weeks and OddDays.
Weeks = Int(Interval / 5)
OddDays = Interval - (Weeks * 5)
TheDate = TheDate + (Weeks * 7)
' Take OddDays weekend into account.
If (DatePart("w", TheDate) + OddDays) > 6 Then
TheDate = TheDate + OddDays + 2
Else
TheDate = TheDate + OddDays
End If
DateAddW = TheDate
Else ' Interval is < 0
Interval = Int(-Interval) ' Make positive & subtract later.
' Make sure TheDate is a workday (round up).
Temp = Format(TheDate, "ddd")
If Temp = "Sun" Then
TheDate = TheDate + 1
ElseIf Temp = "Sat" Then
TheDate = TheDate + 2
End If
' Calculate Weeks and OddDays.
Weeks = Int(Interval / 5)
OddDays = Interval - (Weeks * 5)
TheDate = TheDate - (Weeks * 7)
' Take OddDays weekend into account.
If (DatePart("w", TheDate) - OddDays) < 2 Then
TheDate = TheDate - OddDays - 2
Else
TheDate = TheDate - OddDays
End If
DateAddW = TheDate
End If
End Function