Domanda

Come faccio a copiare una e-mail negli appunti e poi incollarlo in Excel con i tavoli intatta?

Sto usando Outlook 2007 e voglio fare l'equivalente di

"Click on email > Select All > Copy > Switch to Excel > Select Cell > Paste". 

Ho l'oggetto di Excel Modello abbastanza bene capito, ma hanno non esperienza in Outlook diverso il seguente codice.

Dim mapi As NameSpace
Dim msg As Outlook.MailItem
Set mapi = Outlook.Application.GetNamespace("MAPI")
Set msg = mapi.Folders.Item(1).Folders.Item("Posteingang").Folders.Item(1).Folders.Item(7).Items.Item(526)
È stato utile?

Soluzione

devo ammettere che uso questo nella prospettiva 2003, ma si prega di vedere se funziona anche nel 2007:

è possibile utilizzare il MSForms.DataObject per scambiare dati con gli appunti. In Outlook VBA, creare un riferimento a " Microsoft Forms 2.0 Object Library ", e provare questo codice (si può ovviamente fissare il Sub () a un pulsante, ecc.):

Sub Test()
Dim M As MailItem, Buf As MSForms.DataObject

    Set M = ActiveExplorer().Selection.Item(1)
    Set Buf = New MSForms.DataObject
    Buf.SetText M.HTMLBody
    Buf.PutInClipboard

End Sub

Dopo di che, passare a Excel e premere Ctrl-V - ci andiamo! Se anche voi volete trovare l'Excel applicazione attualmente in esecuzione e automatizzare anche questo, me lo faccia sapere.

C'è sempre un HTMLBody valida, anche quando la mail è stata inviata in formato testo o RTF ed Excel visualizzerà tutti gli attributi di testo veicolati all'interno HTMLBody incl. colonne, colori, font, collegamenti ipertestuali, trattini ecc, tuttavia, le immagini incorporate non vengono copiati.

Questo codice illustra gli elementi essenziali, ma non controlla se è davvero selezionata una MailItem. Ciò richiederebbe più di codifica, se si vuole farlo funzionare per le voci di calendario, contatti, ecc pure.

E 'sufficiente se è stata selezionata la posta nella visualizzazione elenco, non hai nemmeno bisogno di aprirlo.

Altri suggerimenti

Ho finalmente raccolse di nuovo e completamente automatizzato esso. Qui ci sono le basi di quello che ho fatto per automatizzare esso.

Dim appExcel As Excel.Application
Dim Buf As MSForms.DataObject
Dim Shape As Excel.Shape
Dim mitm As MailItem
Dim itm As Object
Dim rws As Excel.Worksheet
'code to open excel
Set appExcel = VBA.GetObject(, "Excel.Application") 
'...
'code to loop through emails here       
Set mitm = itm
body = Replace(mitm.HTMLBody, "http://example.com/images/logo.jpg", "")
Call Buf.SetText(body)
Call Buf.PutInClipboard
Call rws.Cells(i, 1).PasteSpecial
For Each Shape In rws.Shapes
    Shape.Delete 'this deletes the empty shapes
Next Shape
'next itm

ho tolto gli URL logo per risparmiare tempo , e quando hai a che fare con 300 messaggi di posta elettronica, che si traduce in a almeno dieci minuti salvate.

ho ottenuto il codice che ho bisogno da un articolo di TechRepublic , e poi cambiato per soddisfare le mie esigenze. Molte grazie a chi ha risposto accettata di questa domanda per il codice appunti.

Ok, quindi dovrò fare alcune ipotesi perché non v'è informazioni mancanti dalla tua domanda. In primo luogo non hai detto quello che mailformat il messaggio è ... HTML sarebbe il più semplice, il processo sarà diverso per RTF e non è possibile in chiaro Dal momento che si sta riferendo alle tabelle io presumo che sono le tabelle HTML e il formato di posta è HTML.

Inoltre non è chiaro dalla tua domanda se si desidera che il contenuto della tabella incollato separatamente (1 cella di Excel per cella tabella) e il resto dei messaggi di posta elettronica bodyText incollati in 1 cella o più?

Finalmente hai in realtà non ha detto se si desidera che il VBA in esecuzione da Outlook o Excel (non che importante, ma colpisce che oggetti intrinseci sono disponibili.

In ogni caso di codice: codice di Outlook per l'accesso alla HTMLBody prop

Dim mapi As Namespace
Set mapi = Application.Session
Dim msg As MailItem
Set msg = mapi.Folders.Item(1).Folders.Item("Posteingang").Folders.Item(1).Folders.Item(7).Items.Item(526) 
Dim strHTML as String
strHTML = msg.HTMLBody
' There is no object model collection for html tables within the htmlbody (which is a string of html) you will need to parse the html and collect the tables before inserting into Excel.

Dopo un po 'di nuovo, ho trovato un altro modo. MailItem.Body è solo testo, e ha un carattere di tabulazione tra le celle della tabella. Così ho usato quella. Ecco l'essenza di quello che ho fatto:

Sub Import()
    Dim itms As Outlook.Items
    Dim itm As Object
    Dim i As Long, j As Long
    Dim body As String
    Dim mitm As Outlook.MailItem
    For Each itm In itms
        Set mitm = itm
        ParseReports (mitm.body) 'uses the global var k
    Next itm
End Sub
Sub ParseReports(text As String)
    Dim table(1 To 1000, 1 To 11) As String 'I'm not expecting to see a thousand rows!
    Dim drow(1 To 11) As String
    For Each Row In VBA.Split(text, vbCrLf)
        j = 1
        For Each Col In VBA.Split(Row, vbTab)
            table(i, j) = Col
            j = j + 1
        Next Col
        i = i + 1
    Next Row
    For i = 1 To l
        For j = 1 To 11
            drow(j) = table(i, j)
        Next j
        hws.Range(hws.Cells(k, 1), hws.Cells(k, 11)) = drow
        k = k + 1
    Next i
End Sub

medio: 77 messaggi di posta elettronica elaborato al secondo. Faccio un po 'di elaborazione minore e l'estrazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top