2014-01-08 1 views
0

Я использовал следующий код в Outlook 2010 успешно:Перспектива 2013 VBA кода не Проводы Активного Ответа Email

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) 
    Dim myItem As MailItem 
    Set myItem = Application.ActiveInspector.CurrentItem 


    If InStr(1, myItem.Subject, "@gtd") > 0 Then 
     Dim objMe As Recipient 
     Set objMe = Item.Recipients.Add("[email protected]") 
     ' for testing only -- Set objMe = Item.Recipients.Add("[email protected]") 
     objMe.Type = olBCC 
     objMe.Resolve 
     Set objMe = Nothing 
    End If 
    Set myItem = Nothing 
End Sub 

Sub GTDTracking() 
    Dim initialSubj As String 
    Dim finalSubj As String 
    Dim myItem As MailItem 
    Set myItem = Application.ActiveInspector.CurrentItem 

    initialSubj = myItem.Subject 
    finalSubj = initialSubj & " (@gtd)" 
    myItem.Subject = finalSubj 
End Sub 

Я недавно перешел на Outlook, 2013. Он предоставляет возможность ударить ответ и есть новый ответ окно будет состыковано прямо в списке сообщений. Однако, если я отвечу, что путь мой код не в этой строке:

Set myItem = Application.ActiveInspector.CurrentItem 

Если я открываю сообщение с помощью двойного щелчка, так что не пристыкован к списку сообщений, код работает просто отлично.

ответ

4

Вот что сработало для меня. Следующая функция возвращает объект сообщения Outlook.MailItem для сообщения, которое пользователь просматривает, будь то пристыкованный ответ или сообщение в его собственном окне. Если он не может найти открытое сообщение, он вернет Nothing. Ключом к этому является свойство Application.ActiveExplorer.ActiveInlineResponse, которое является новым в Outlook 2013. Вам нужно будет добавить код, чтобы избежать попытки вызвать ActiveInlineResponse, если вы используете более старую версию Outlook.

Function getActiveMessage() As Outlook.MailItem 

    Dim insp As Outlook.Inspector 

    If TypeOf Application.ActiveWindow Is Outlook.Inspector Then 
     Set insp = Application.ActiveWindow 
    End If 


    If insp Is Nothing Then 
     Dim inline as Object 
     Set inline = Application.ActiveExplorer.ActiveInlineResponse 
     If inline Is Nothing Then Exit Function 

     Set getActiveMessage = inline 
    Else 
     Set insp = Application.ActiveInspector 
     If insp.CurrentItem.Class = olMail Then 
      Set getActiveMessage = insp.CurrentItem 
     Else 
     Exit Function 
     End If 

    End If 

End Function 

Дайте мне знать, если это сработает для вас!

+0

это работает отлично! Отличное решение! –

Смежные вопросы