2013-05-09 15 views
5

Sto utilizzando VBA per formattare tutti i messaggi di posta elettronica in uscita in un determinato modo prima dell'invio. Ad esempio, voglio rimuovere la prima colonna da tutte le tabelle che sono incorporate nell'e-mail. Io uso il seguente codice:Outlook Ottieni altre email nel thread di posta elettronica - UniqueBody

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) 
    Dim wd As Word.Document 
    Set wd = ActiveInspector.WordEditor 
    Dim tb As Word.Table 
    For Each tb In wd.Tables 
     tb.Columns(1).Delete 
    Next tb 
End Sub 

Il codice sopra funziona perfettamente. Tuttavia, il problema è che voglio solo formattare il testo dell'email my. Spesso risponderò o inoltrerò l'email di qualcun altro, il che significa che il testo dell'email precedente sarà nella stessa finestra dell'Inspector. I non voglio formattare il testo/immagini/ecc. delle e-mail precedenti nella discussione. Come può essere realizzato?

So che ogni e-mail all'interno di un thread, sebbene siano tutti nella stessa finestra, è una singola unità. Lo so perché quando si legge un messaggio di posta che fa parte di un filo, come si sposta il mouse, si vedrà

enter image description here

sul lato destro dello schermo, indicando dove la parte successiva del filo è . Quando componi una nuova email (reply o forward) che fa parte del thread, i pulsanti sopra non sono mostrati, ma vedrai comunque una linea orizzontale blu che separa le diverse parti del thread l'una dall'altra.

Stavo pensando che forse posso cercare la prima occorrenza della riga nell'e-mail e applicare solo la formattazione fino a quel momento. Tuttavia, sembra che la linea non sia realmente un testo o una normale formattazione che sia ricercabile nel senso normale. Infatti, se si copia il testo dell'email (prima dell'invio) e quindi si incolla in Word, la riga scompare.

Qualche suggerimento? Grazie!

Aggiornamento

La mia domanda non ha nulla a che fare con la "visualizzazione per conversazione" che si trova nelle versioni 2010 e successive. Outlook 2010 consente di visualizzare il altro e-mail nella discussione in un gruppo. Quello che voglio, tuttavia, è essere in grado di scorrere (tramite codice) le e-mail nella discussione all'interno della stessa e-mail. Quindi, se c'era una e-mail "a", e poi una risposta, "b", e poi un'altra risposta, "c", c conterrà anche b sotto di essa, e quindi sotto, tutti all'interno della stessa e-mail . In pseudo-codice, vorrei il seguente:

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) 
    Dim wd As Word.Document 
    Dim smail as SubEmail 
    Dim tb As Word.Table 
    Set wd = ActiveInspector.WordEditor 
    For Each smail in wd 
     For Each tb In wd.Tables 
      tb.Columns(1).Delete 
     Next tb 
     Exit For 
    Next smail 
End Sub 

Aggiornamento

ho trovato una funzionalità simile in Exchange Web Services, chiamato UniqueBody. Vedi here. Questo è esattamente quello che sto cercando, non solo con Exchange.

+0

Quale versione di Outlook una versione di ciò che si vuole esiste di default nella versione dopo Outlook 2" 010 –

+0

@Ramhound, vedere il mio aggiornamento – as9876

risposta

1

Perché non cercare "Da:" chr (13) "Inviato:"? Outlook inserirà questi tag in qualsiasi email indipendentemente da dove proviene.

Si supponga che l'intero corpo di messaggi di posta elettronica a, b, c nel vostro esempio di cui sopra sono in sBody:

Sub GetFirstThread() 
    Dim olItem As Outlook.MailItem 
    Dim sText As String 

    Set olItem = ActiveExplorer.Selection.Item(1) 
    sBody = olItem.Body 
    i=1 
    While i < Len(sBody) 
     If Asc(Mid(sBody, i, 1)) = 13 Then 'Look for From: 
      If Mid(sBody, i + 1, 5) = "From:" Then 
       'we found the start of email b 
       nPosEb = i 
      End If 
     End If 
     i=i+1 
    Wend 
    '...do something with nPosEb 
End Sub 
+0

Abbastanza interessante, invece di una funzione incorporata, probabilmente dovrò andare con esso.Tuttavia, è ancora un po 'hacky - in teoria, qualcuno potrebbe aver messo la sintassi esatta (da , a ...) all'interno del corpo di una e-mail.Inoltre, sarebbe un po 'difficile ottenere il modello a oggetti di Word in questo modo, ma potrei ovviare a questo ... – as9876

+0

È decisamente un hack, ma la mia ipotesi è che non c'è una funzione incorporata a causa di t lui imprevedibilità di tutti i diversi editor di posta elettronica. Inoltre, ho apportato alcune modifiche al codice. –

Problemi correlati