1
  1. Я хочу, чтобы название / тема каждой встречи предшествовала времени.
  2. Я хочу, чтобы заголовок автоматически обновлялся, чтобы соответствовать времени события (если я изменяю дату, то же самое происходит и с датой заголовка).

Пример:

10:00-12:00 Meeting with Joe
  1. Попытка найти встроенный метод оказалась безуспешной. Ничего в опциях, настройках, правилах, я в значительной степени обескуражил весь интерфейс.
  2. Макрос, вероятно, путь. Мой VB не существует, хотя я не побоялся бы узнать, если кто-нибудь разместит несколько направляющих ссылок.
  3. Я не нашел ни одного "сохраненного" события сохранения встречи для календаря через поиск в Google. Есть ли один, который я мог бы использовать, чтобы активировать макрос впоследствии?

Это вообще возможно ??

2 ответа2

2

Следующий фрагмент хорошо выполняет свою работу, написал ее примерно через 3-4 часа, и писать было довольно тяжело;)

Любые комментарии о том, как сделать код более лаконичным и лучше структурированным, приветствуются.

Я оставил комментарии по частям, которые, как мне показалось, были немного неясны для будущих посетителей. Если вы читаете это и ничего не понимаете, оставьте комментарий! :)

Dim WithEvents curCal As Items ' set var as the holder of Item events
Public lastSavedAppointmentStart As Date ' variable so we won't infinitely loop when saving Items
Public lastSavedAppointmentEnd As Date
Public justSaved As Boolean

' Some initial Startup Code from slipstick.com
' F5 while the cursor is in this sub (in the vba editor)
' will reload the so called "project"
Private Sub Application_Startup()
   Dim NS As Outlook.NameSpace
   Set NS = Application.GetNamespace("MAPI")
   Set curCal = NS.GetDefaultFolder(olFolderCalendar).Items
   Set NS = Nothing
   lastSavedAppointmentStart = Now()
   lastSavedAppointmentEnd = Now()

End Sub


Private Sub checkPrependtime(ByVal Item As Object)
    Dim isntLastAppt As Boolean
    isntLastAppt = isntLastSavedAppointment(Item)
    If justSaved = False And isntLastAppt Then
        If Not isTimePrepended(Item) Then
            Call saveLastAppointment(Item)
            Call prependTime(Item)
        Else
            Call removePrependedTime(Item)
        End If
    Else
        justSaved = False
    End If
End Sub

Function isntLastSavedAppointment(ByVal Item As Outlook.AppointmentItem) As Boolean
    isntLastSavedAppointment = lastSavedAppointmentStart <> Item.start Or lastSavedAppointmentEnd <> Item.End
End Function

Private Sub saveLastAppointment(ByVal Item As Outlook.AppointmentItem)
    justSaved = True
    lastSavedAppointmentStart = Item.start
    lastSavedAppointmentEnd = Item.End
End Sub

Private Sub removePrependedTime(ByVal Item As Outlook.AppointmentItem)
    Set lastSavedAppointment = Nothing
    Dim oldSubject As String
    ' Cut out the time part of the subject (e.g. 13:00-15:00 Meeting with Joe)
    ' returns Meeting with Joe
    oldSubject = Mid(Item.Subject, 13, Len(Item.Subject))
    Item.Subject = oldSubject
    Item.Save
End Sub

Private Sub prependTime(ByVal appt As Outlook.AppointmentItem)
    Dim newSubject As String, apptStart As Date, apptEnd As Date
    Set lastSavedAppointment = appt
    newSubject = Format(appt.start, "hh:mm") & "-" & Format(appt.End, "hh:mm") & " " & appt.Subject
    appt.Subject = newSubject
    appt.Save
End Sub

' Check whether the third char is :
' If time is prepended (e.g. Item.subject is something like
' "12:00-13:00 Meeting with joe" Then third char is always :)
Function isTimePrepended(ByVal Item As Outlook.AppointmentItem) As Boolean
    isTimePrepended = InStr(3, Item.Subject, ":")
End Function


' BEGIN event handlers
Private Sub curCal_ItemAdd(ByVal Item As Object)
    If TypeOf Item Is Outlook.AppointmentItem Then
        Call prependTime(Item)
    End If
End Sub

Private Sub curCal_ItemChange(ByVal Item As Object)
    If TypeOf Item Is Outlook.AppointmentItem Then
        Call checkPrependtime(Item)
    End If
End Sub

' END event handlers
0

Это возможно, по крайней мере, в OWA и Outlook 2013, возможно, Outlook 2010. Мы только недавно начали играть с приложениями для Outlook в офисе, поэтому, к сожалению, я не могу предоставить какой-либо код для начала работы.

Прочитайте это:http://msdn.microsoft.com/en-us/library/dn574747%28v=office.15%29

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .