Перспектива: выделите время на тему встречи

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

Пример:

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

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

1
[начать здесь] (http://www.slipstick.com/developer/copy-new-appointments-to-another-calendar-using-vba/) Raystafarian 10 лет назад 1
[и здесь] (http://msdn.microsoft.com/en-us/library/aa155701 (v = office.10) .aspx # odc_ch11olevents_topic6) Raystafarian 10 лет назад 1

2 ответа на вопрос

2
Cat Boss

Следующий фрагмент хорошо выполняет свою работу, написал ее примерно через 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
beeks

It is possible, at least in OWA and Outlook 2013, possibly Outlook 2010. We have just started playing around with developing outlook apps in the office recently, so unfortunately I cannot provide any code to get you started.

Give this a read: http://msdn.microsoft.com/en-us/library/dn574747%28v=office.15%29