Il blog di Gianni Giaccaglini

Blog su VBA e VSTO
Gianni Giaccaglini

My Links

News

NB - V. anche gli ARTICOLI (in fondo a questa barra)
Solo quesiti validi a: giannigiac@tin.it
Il mio nuovo libro


La mia nipotina ELISA

Foto con dedica a ME di
Bill Gates giovanissimo
nei mitici anni 80!

Categorie Post

Categorie Articoli

Archivio

Immagini

Blog Stats

Risposta a un messaggio con corpo (Body) del testo formattato

Questo post riporta un aggionamento dell'articolo di analogo argomento, di cui si indica il link:

http://blog.shareoffice.it/giannigiaccaglini/articles/6440.aspx

A beneficio di chi avesse già letto la versione precedente di tale articolo nonché... delle persone pigre ecco comunque il testo aggiunto.

Formattazione del Body di una replica (soluzione parziale)

Nella risposta a un messaggio selezionato (nell'elenco degli arrivi) non sembra possibile ottenere la formattazione del corpo (Body), per il semplice motivo che la proprietà Body è una stringa. Difficoltà possono nascere persino quando si tenta di incollare tramite macrocodice nel corpo della replica (come pure di un nuovo messaggio) materiale copiato da un documento Word (cosa che funziona regolarmente nell'uso manuale).

Pensa e ripensa un ripiego c'è, espresso anzitutto da una routine del tipo seguente

Sub BodyFormattato()

  Dim WordDoc As Word.Document, TestoDoc As String

  Set WordDoc = _

  GetObject("C:\Documenti\DocStandard.doc")

  With WordDoc

    .Select

    Selection.Copy

    .Close

    '.Parent.Quit 'QUI DA' ERRORE, DIO SA PERCHE'...

  End With

  Set WordDoc = Nothing

  Dim MioMess As MailItem

  Set MioMess = Application.CreateItem(olMailItem)

  'Istruzione facoltativa (promemoria all’utente):

  'MsgBox "Ctrl+V per inserire testo formattato"

  With MioMess

    .BodyFormat = olFormatRichText 'Imposta il formato RTF

    .To = ""

    .Body = " "

    .Display 'Mostra la letterina, senza ancora spedirla

  End With

  ActiveDocument.Range.Paste

  Set MioMess = Nothing

End Sub

La scappatoia, come gran parte degl’interessati dovrebbero comprendere, consiste nell’istruzione semifinale ActiveDocument.Range.Paste che agisce nel documento attivo, ove adesso in ballo c’è Word.

Approfittando di questa scoperta, ecco poi una Sub che la applica a un messaggio “replicato”, ovvero che sfrutta il metodo Reply:

Nota – Invito a studiare, e sperimentare, anche ReplyAll...

Sub RispAunMessFormattato()

  'Con inserimento del testo di un documento

  'Word nel BODY della replica (Reply)

  Dim Nms As Outlook.NameSpace

  Set Nms = Application.GetNamespace("MAPI")

  Dim OlSel As Outlook.Selection

  Dim Mess As String, PercorsoAllegati As String

  PercorsoAllegati = "C:\Documenti\"

  Dim CartellAttiva As String

  Dim iMess As Integer, Mittente As String

  CartellAttiva = ActiveExplorer.CurrentFolder.Name

  If CartellAttiva <> "Posta in arrivo" Then

    Mess = "Questa routine ha senso e funziona" & vbLf & _

                "solo se è attiva la Posta in arrivo!"

    MsgBox Mess, vbInformation, "Cartella attiva: " & CartellAttiva

    Set ActiveExplorer.CurrentFolder = _

    Nms.GetDefaultFolder(olFolderInbox)

    Exit Sub

  End If

  Set OlSel = ActiveExplorer.Selection

  On Error Resume Next 'Ignora i messaggi privi di mittente

  '(es. segnalazioni del provider di utenti sconosciuti)

  Dim WordDoc As Word.Document, TestoDoc As String

  Set WordDoc = _

  GetObject(PercorsoAllegati & "DocStandard.doc")

  With WordDoc

    .Select

    Selection.Copy

    .Close

    .Parent.Quit

  End With

  Set WordDoc = Nothing

  With OlSel.Item(1) 'Risposta a un solo messaggio, per semplicità

    Mittente = .SenderName

    With .Reply 'Restituisce un messaggio di replica

      '.Body = "Hi " & Mittente & vbLf & vbLf & TestoDocSet

      .BodyFormat = olFormatRichText

      .Display

       'Chiedi all’utente se vuol spedire subito o rimandare

       If Msgbox("Vuoi che spedisco il messaggio", VbYesNo) = VbYes Then

         .Send

       End If

    End With

  End With

  Set OlSel = Nothing: Set Nms = Nothing

End Sub

Questo è tutto, gente.

?>

posted on lunedì 25 settembre 2006 14.41