Testo in email



  • Testo in email
    di Rita (utente non iscritto) data: 22/05/2015 11:35:51

    Ciao a tutti, qui sotto ho inserito un esempio semplice che utilizzo per costruire una email da Excel.
    so che in htmlbody posso inserire un testo ma la mia domanda e' questa.
    Se ho aperto un file word dove faccio brutalmente un copia e incolla in una email questo testo viene copiato esattamente.
    partendo dal presupposto che abbia fatto un copia non c'e' la possibilita' anche tramite un comando sendkeys di incollarlo una volta creata la mia email tramite l'istruzione qui sotto senza doverla trascrivere ed inserigli il testo in grassetto colorato etc.
    Nel file word e' gia' cosi' e incollandolo mi viene esattamente uguale
    Nessuno ha un idea?

     
    sub invio ()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim EmailAddr As String
    Dim Subj As String
    Dim BodyText As String
    With OutMail
    .ReadReceiptRequested = True
    .To = xxx
    .CC = Range("C1")
    .BCC = Range("C4")
    .Subject = "prova"
    .HTMLBody = "prova invio"
    .Attachments.Add
    .Display
    .SEND
    End If
    End With
    Set OutMail = Nothing
    Set OutApp = Nothing
    end sub



  • di Marius44 data: 23/05/2015 21:16:11

    Se ho ben capito le tue necessità rovistando fra precedenti discussioni ho trovato una routine che ho riadattato per il tuo caso. La routine "copia" (ma non saprei dire se riporta l'esatta formattazione) uno o più dati da un Documento Word e li trascrive in una o più celle di un Foglio Excel.
    Occorre precisare, però, quanto segue:
    1° - nel Documento Word le informazioni da attingere vanno definite come Segnalibro (BookMark);
    2° - il documento Word NON deve essere aperto; ci pensa la routine;
    3° - stabilisci tu in quale cella/e del foglio collocare le precedenti informazioni e poi adatta la sub alle tue esigenze.
    Credo sia più facile far assumere il contenuto di una o più celle come HTMLBody.
    Provaci e fammi sapere.
     
    Option Explicit
    
    Public Sub Trascrive()
    On Error GoTo Errore
    
    Dim objWord As Object
    Dim objDoc1 As Object
    Dim sPath As String
    Dim sNomeFile1 As String
    Dim sh As Worksheet
    
        Set sh = ThisWorkbook.Worksheets("Foglio1")
        sPath = ThisWorkbook.Path
        sNomeFile1 = "Book.doc"
        Set objWord = CreateObject("Word.Application")
        
        With sh
            .[B2].ClearContents: .[B3].ClearContents
            Set objDoc1 = objWord.Documents.Open(sPath & "" & sNomeFile1)
            'adatta le due celle sotto alle tue esigenze
            .[B2].Value = objDoc1.Bookmarks("DATO1").Range.Text
            .[B3].Value = objDoc1.Bookmarks("DATO2").Range.Text
            objDoc1.Close
            Set objDoc1 = Nothing
        End With
         
    Fine:
        If Not objWord Is Nothing Then
            objWord.Quit
            Set objWord = Nothing
        End If
        MsgBox "Trascrizione eseguita"
        Exit Sub
     
    Errore:
        MsgBox Err.Number & vbNewLine & Err.Description
        Resume Fine
    End Sub



  • di Marius44 data: 23/05/2015 21:41:04

    Attenzione: dimenticavo che Word.doc e Excel.xls DEVONO STARE nella stessa Directory (Path), altrimenti bisogna settare i due indirizzi.



  • di Rita (utente non iscritto) data: 24/05/2015 14:02:39

    Grazie Marius della risposta ma non è proprio questo ossia da Excel creo delle email e dovrei fare semplicemente un incolla di un testo che prendo da word avendo fatto un copia brutale ossia seleziono un testo e cliccandoci sopra faccio copia poi da Excel creo l'email e nel testo della email faccio incolla



  • di scossa data: 24/05/2015 17:32:35

    cit. Rita: "ossia seleziono un testo e cliccandoci sopra faccio copia poi da Excel creo l'email e nel testo della email faccio incolla"

    C'è qualcosa che mi sfugge.

    Nel tuo codice, se dopo .Display, usi l'istruzione .Send la mail parte comunque ......

    Se elimini l'istruzione .Send ti trovi a video l'email in Outlook pronta per essere modificata ed inviata: incolla nel corpo quello che hai copiato da Word e poi invia.

    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di Marius44 data: 24/05/2015 17:36:15

    Ciao Rita
    non vorrei sbagliarmi (contento se sarò smentito) ma credo che non sia possibile.
    Tieni presente che stai copiando da Word e vuoi trasferire il copiato in HTMLBody di OutLook (o similare) dove hai memorizzato to: da "C1" e cc: da "C4" di un Foglio Excel che, suppongo, alleghi (.Attachments.Add).
    Passo la palla ... ai "maghi" di Word.



  • di Luca73 data: 25/05/2015 08:04:50

    Ciao
    secondo me potresti provare così:
    - aprire un'istanza di word in excel
    - aprire il file che ti interessa
    - modificare il file eliminando le parti non interessanti e salvarlo com HTML
    - da excel leggere il file HTML (che quindi include la formattazione) e includerlo nell'HTML Body della mail

    la cosa più difficele per me (in quanto non ho mai usato le macro con word) è modificare il file word ovvero selezionare la parte che ti interessa e crearne un file.
    Ciao
    Luca








  • di rita (utente non iscritto) data: 25/05/2015 08:49:31

    grazie a tutti in ogni caso delle risposte.

    quella che si avvicina di piu' e' quella di scossa ossia quando afferma

    << incolla nel corpo quello che hai copiato da Word >>

    e' quello che vorrei cercare di fare in automatico con una istruzione, avevo pensato a sendkeys ma non so come fare





  • di scossa data: 25/05/2015 09:32:05

    cit. Rita: "e' quello che vorrei cercare di fare in automatico con una istruzione"

    Ma tu la invii direttamente (.Send) o la apri (.Display)?
    Nel secondo caso non vedo quale sia il problema a premere ctrl+v per incollare la clipboard, visto che comunque il click su "invia" lo devi fare manualmente.

    Se invece la invii direttamente, allora devi tenere presente che la clipboard in VBA è gestita in modo "particolare".
    La soluzione potrebbe essere abbastanza semplice se ti accontenti di incollare il solo testo.
    Se invece vuoi incollare anche tutta la formattazione la cosa si complica. Ad esempio potresti salvare il documento Word in formato HTML, aprire il file HTML nel browser, visualizzare il sorgente della pagina, selezionare tutta la parte che ti interessa (compresi i vari tag) copiare la selezione e poi lanciare la tua macro modificata per gestire la clipboard .......


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di Rita (utente non iscritto) data: 25/05/2015 18:54:46

    Ciao scossa dimentica il send invio il problema è che con un ciclo for next creo un numero nutrito di email dove all'interno devo inserire questo testo che copio da un file word. So anche io che control v e la copio il problema è che non è una ma sono molteplici



  • di scossa data: 25/05/2015 20:46:18

    cit. Rita: "devo inserire questo testo che copio da un file word. So anche io che control v e la copio il problema è che non è una ma sono molteplici"

    Allora devi decidere se ti basta incollare il solo testo o anche la sua formattazione. Come già detto, nella seconda ipotesi devi passare attraverso un browser per poter copiare i relativi tag di formattazione.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di Rita (utente non iscritto) data: 26/05/2015 08:16:38

    a questo punto mi basterebbe anche solo incollare il testo ma con un comando in automatico.
    ho provato a salvare il file in html ed ad aprirlo cercando di sfruttare i comandi ma solo un gran casino



  • di scossa data: 26/05/2015 09:09:26

    cit. Rita: "... a questo punto mi basterebbe anche solo incollare il testo ...."

    Vedi il codice sotto.
    Copia il testo che vuoi nella clipboard e poi lancia la macro.
    Considera che se vuoi "copiaincollare" i tag html (dal sorgente della pagina .html) ti basta usare .HTMLBody anziché .Body.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

     
    Sub test()
        Dim OutApp As Object
        Dim OutMail As Object
        Dim sTesto As String
        Dim sString As String
        Dim oDO As Object
      
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
        Set oDO = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        
        oDO.GetFromClipboard
        sTesto = oDO.GetText
        
        With OutMail
            .To = "pippo.baudo@pluto.it"
            .CC = ""
            .BCC = ""
            .Subject = "prova "
            .Body = sTesto
            .display
        End With
    
    
        Set OutMail = Nothing
        Set OutApp = Nothing
        Set oDO = Nothing
    
    End Sub
    



  • di rita (utente non iscritto) data: 26/05/2015 13:09:20

    Ciao Scossa, quella che mi hai inviato funziona ma effettivamente non tiene conto della formattazione del testo.
    ho provato a creare un file di word con all'interno un testo
    l'ho salvato come html, l'ho aperto aprendolo con il browser, sono andato in origine per vedere i comandi utilizzati ma non so cosa incollare nella macro per vedere il testo nella email esatto con la formattazione



  • di scossa data: 26/05/2015 13:53:24

    Dipende ovviamente dal tuo documento.

    Probabilmente dovrebbe bastare copiare tutto quello che è compreso tra il tag {body} e {/body} o, meglio ancora tra i tag {div class=WordSection1} e {/div} (entrambi i tag esclusi)

    ad esempio questo che vedi:


    prova testo formattato: grassetto, rosso, font courier new



    nel tuo sorgente dovrebbe essere:
    {div class=WordSection1}
    {p class=MsoNormal}{span lang=IT}prova testo formattato: {b}grassetto{/b}, {span
    style='color:red'}rosso{/span}, {span lang=IT style='font-family:"Courier New"'}font
    courier new{/span}{/p}
    {/div}

    N.B.: la parentesi { va letta come <, mentre } va letta come >.

    Fai delle prove, tenendo presente che il sorgente che ottieni è ridondante e potrebbe essere semplificato, ma comunque i tag devono essere sempre bilanciati: {tag1} bla {eventualeTag2} bla bla ... {/eventualeTag2} bla ... {/tag1}


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di Luca73 data: 26/05/2015 17:31:11

    Ciao
    una volta che hai salvato il file come HTML ti basta riaprirlo e leggerlo con una sequenza come quella riportata sotto sostituisci FILEPROV con il path completo del tuo file.

    Fammi sapere
    Ciao
    Luca

     
    Dim TextLine
    DIm TestoHTML
    Open "FILEPROV" For Input As #1    ' Apre il file.
    Do While Not EOF(1)    ' Ripete fino alla fine del file.
        Line Input #1, TextLine    ' Assegna la riga a una variabile.
        TestoHTML = TestoHTML & LineTesto    
    Loop
    Close #1    ' Chiude il file.
    [...]
    With OutMail
    .HTMLBody = TestoHTML
    .Display
    End With
    
    






  • di Rita (utente non iscritto) data: 26/05/2015 17:59:39

    Grazie Scossa, provero' a vedere.
    ...Per Luca
    Ho fatto quello che mi hai detto salvando un file word come html ed inserendolo con tutto il percorso ma mi apre le email con il testo vuoto



  • di scossa data: 26/05/2015 18:57:48

    cit.: "una volta che hai salvato il file come HTML ti basta riaprirlo e leggerlo con una sequenza come quella riportata sotto sostituisci FILEPROV con il path completo del tuo file"

    L'idea non è da scartare, però hai visto quanta "porcheria" mette Word nell'HTML? Come minimo bisogna limitare la stringa finale al contenuto del solo body.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di Luca73 data: 27/05/2015 08:06:59

    Per Scossa
    in effetti io l'avavo fatto con un file html creato da me...
    se il testo è corto o ripetitivo si può ottimizzare con un html fatto in casa...

    Per Rita
    posta il codice creato fino ad adesso...

    Ciao a tutti






  • di Luca73 data: 27/05/2015 09:09:58

    Ciao
    ho verificato il codice che avevo postato ieri e ho scoperto esserci un errore così funziona.
    Chiaramente con la limitazione espressa da scossa che ti ingloba tutta la "schifezza" che word ha salvato nel file html


     
    Dim TextLine
    DIm TestoHTML
    Open "FILEPROV" For Input As #1    ' Apre il file.
    Do While Not EOF(1)    ' Ripete fino alla fine del file.
        Line Input #1, TextLine    ' Assegna la riga a una variabile.
        TestoHTML = TestoHTML & TextLine    
    Loop
    Close #1    ' Chiude il file.
    [...]
    With OutMail
    .HTMLBody = TestoHTML
    .Display
    End With
    






  • di Rita (utente non iscritto) data: 27/05/2015 14:12:14

    Grazie a tutti
    ho provato la nuova di Luca e funziona parzialmente bene ossia mi lascia le formattazioni il testo etc solo che molte parole del testo le unisce e non capisco il perché.
    In ogni caso funziona



  • di Rita (utente non iscritto) data: 28/05/2015 09:06:43

    Solo ad onor di informazione ho risolto il problema delle parole che si univano nel testo modificando l'istruzione di Luca come descritto qui di seguito e mi ha risolto il problema
    In ogni caso ringrazio lui e scossa.

     
    TestoHTML = TestoHTML & TextLine    & "     "