Come inviare un stessa mail di risposta (modello salvato in Outlook) al mittente di posta (a, cc)

StackOverflow https://stackoverflow.com/questions/8816082

Domanda

Che cosa ho bisogno è esattamente .. sto ricevendo continua mail da clienti (clienti diversi) per aggiornare i propri dati di asset nel database .. una volta processo fatto .. devo rispondere (compresi cc) dal loro racconto di posta come "dettagli di asset con successo memorizzato nel database "(sto usando template) ... mi suggerire come farlo usando VBA ..?

Option Explicit

Public Sub ReplyToAll ()

Dim oExp Come Outlook.Explorer

'per le mail selezionato in Outlook

Dim OSM Come MailItem

Dim onm Come MailItem

On Error GoTo Err

Set oExp = Outlook.Application.ActiveExplorer

'Check if something is selected
If oExp.Selection.Count > 0 Then

    'Get the first item selected

    Set oSM = ActiveExplorer.Selection.Item(1)

        'Create a Reply template

        Set oNM = oSM.ReplyAll

        With oNM

            'Change the subject
            .Subject = "RE: " & oSM.Subject

            'Change the body
            .Body = .Body & Chr(13) & Chr(13)

        'Display the new mail before sending it
            .Display

        End With

End If

Exit Sub

err:

MsgBox Err.Description, vbCritical

End Sub

.......................

sezione 3

Sub ReplyAll () Dim objOutlookObject Come MailItem

Per ogni objOutlookObject In GetCurrentOutlookItems

With objOutlookObject
.ReplyAll.Display

'prefisso prob non include il modello salvato nella posizione c ..throws qualche errore

.createitemtemplate("c:\car.jtm")

Con End Il prossimo End Sub

GetCurrentOutlookItems function () Collezione Come Dim objApp Come Outlook.Application Dim objItem As Object Dim colItems As New Collection

Set objApp = CreateObject("Outlook.Application")
On Error Resume Next
Select Case TypeName(objApp.ActiveWindow)
    Case "Explorer"
        For Each objItem In objApp.ActiveExplorer.Selection
            colItems.Add objItem
        Next
    Case "Inspector"
        colItems.Add objApp.ActiveInspector.CurrentItem
    Case Else
        ' anything else will result in an error, which is
        ' why we have the error handler above
End Select

Set objApp = Nothing
Set GetCurrentOutlookItems = colItems

End Function

..........

È stato utile?

Soluzione

Mi dispiace il mio commento in modo era brusco; 500 caratteri non lascia molto spazio per una risposta completa.

La tua domanda è molto chiara ed è quindi probabile che sia chiuso. Di certo, non vedo come si possa rispondere. Ecco perché è importante che si tenta di risolvere il proprio problema e di ritorno, se necessario, con domande specifiche.

Di seguito fornisco i link a post recenti che credo vi aiuterà a iniziare. Come ho detto nel mio commento, guardare attraverso i post recenti. Utilizzare la funzione di ricerca. Ci sono alcune molto buone risposte qui se si guarda per loro.

I primi due posti sono tutorial scritti da me. I primi passi sono gli stessi, ma, perché le domande non erano del tutto gli stessi, passi successivi sono diversi. Guardare sia e scegliere i bit rilevanti per voi. Gli altri post tutte contengono informazioni si possono trovare utili.

come importare i dati di Outlook posta in Excel

aggiornamento foglio Excel basa sulla posta di Outlook

poteva guida chiunque me nella creazione di una macro prospettiva che fa la seguente

invia un'email da Excel 2007 VBA utilizzando un modello di prospettive variabili set

utilizzando Visual Basic per l'accesso sottocartella nella casella di posta

VBA evento prospettive in movimento e-mail

Nuova sezione in risposta alle nuove informazioni da interrogante

A parte piccole modifiche, il codice nella tua domanda è stata presa dal file di Guida di Microsoft per NewMailEx Event. Questo codice funziona solo se si ha il corretto tipo di installazione e se lo si inserisce nel posto giusto:

  • " Il NewMailEx evento sarà solo il fuoco per le cassette postali in Microsoft Outlook che forniscono la notifica per il messaggio ricevuto come Microsoft Exchange Server. Inoltre, l'evento si attiverà solo se Outlook è in esecuzione. In altre parole, non sarà il fuoco per i nuovi articoli che vengono ricevuti nel posta in arrivo quando Outlook non era aperto. gli sviluppatori che vogliono accedere a questi elementi per i clienti che utilizzano Outlook su un conto necessità server di posta elettronica di Exchange di attuare il loro codice sul server Tuttavia, la NewMailEx evento sarà il fuoco contro la modalità cache in tutte le impostazioni:. Scarica elementi interi , Scarica intestazioni , e Scarica intestazioni e poi elementi interi . "

Avete il corretto tipo di installazione? Si può inserire il codice sul server? Anche se questo è l'approccio corretto per la versione finale della macro, io non credo che sia l'approccio corretto mentre si sta imparando VBA e Outlook.

Hai bisogno di due cose:

  1. una specifica dettagliata della macro che si desidera scrivere e
  2. più comprensione di VBA e Outlook.

dubito che si possa creare la specifica dettagliata ancora, perché non si sa abbastanza di VBA e Outlook. Ma possiamo elencare le cose è necessario sapere:

  • Come si scrive al database da Outlook?
  • Come si fa a identificare gli elementi di posta elettronica che si desidera registrare? Nel tuo esempio, si sta verificando per un soggetto di "Ciao" e rispondendo "Hi". Questo va bene per un primo esperimento, ma è necessario identificare il vero e proprio metodo. Si tratta di un nuovo mittente? Ci sono informazioni specifiche nel corpo della message? Ha un essere umano deve identificare tali elementi di posta?
  • Nel tuo esempio, si dispone di una cartella "Personal" sotto "Posta in arrivo". Molte persone sembrano avere questo tipo di struttura di cartelle e gli esempi Microsoft tendono ad utilizzare le cartelle di questo tipo. Io non. Ho una cartella chiamata "Home". Sotto questo devo cartelle per "assicurazione", "Shopping", "Money". In queste ho cartelle per i miei diversi fornitori. Una volta mi sono occupato di un messaggio, mi muovo a cartella appropriata. Risposte vanno nella stessa cartella. Questo è il mio sistema e funziona per me. Qual è il vostro sistema sarà? Sarà, per esempio, ci può essere una cartella singola per tutti i clienti o uno per ogni cliente?

È possibile che questo è un elenco di avviamento di domande per la vostra specifica, ma è anche una lista di avviamento delle cose che dovete sapere.

Forse avete un capo che vi vuole smettere di perdere tempo e iniziare a scrivere la macro, ma non si sa ancora abbastanza per pianificare la macro finale.

Inizia con i miei tutorial. I primi tre passi sono circa la struttura delle cartelle. Questi passaggi sono essenziali se si ha il tipo di strutture di cartelle complesse che ho. Prossimo passo attraverso una cartella la visualizzazione di informazioni selezionate da ogni elemento di posta. Ho passi in cui scrivo corpi dei messaggi su disco. Vi suggerisco di andare sia attraverso tutorial e provare il mio codice. Non tutto sarà immediatamente utile, ma è tutte le informazioni buon background.

Qual è la vostra base di dati? E 'Access o Excel? C'è qualche aiuto nei miei tutorial e negli altri link di cui sopra con la scrittura in Excel che si potrebbe adattare per l'accesso.

Credo che quanto sopra è sufficiente per ora. Prendere lentamente e si inizierà ad avere un senso. Ricordo ancora la prima volta che ho provato a scrivere una macro prospettiva quindi capisco la vostra confusione. Vi prometto che sarà chiaro. Buona fortuna.

Nuova sezione in risposta alla seguente commento:

  • "Ciao Ho provato ..Got quello che voglio .... Rimosso il mio code..and precedente provato a sostituire il nuovo codice .. Ora piccolo aiuto necessario da voi .... v'è alcun modo per utilizzare lo stesso formato come quando si clicca sul pulsante ReplyAll nella prospettiva .. il mio codice funziona bene ..prob è il formato della posta è differiscono .. "

Problema 1

.Body = .Body & Chr(13) & Chr(13)

Si utilizza il corpo del testo. Penso che si desidera che il corpo HTML. Prova:

.HTMLBody = .HTMLBody & Chr(13) & Chr(13)

Problema 2

Non è possibile aggiungere al corpo HTML in questo modo. Il corpo HTML sarà:

<!doctype ...><html><head> ... </head><body> ... </body></html>

È necessario aggiungere il testo per l'inizio del corpo; vale a dire, subito dopo <body>. Se si aggiunge solo il testo, sarà di accettare qualunque stile, margini e colori il mittente ha utilizzato. Il codice seguente aggiunge un testo che sembra lo stesso in ogni e-mail che ho provato con. Il mio testo è all'interno di una tabella con una singola cella. La tabella copre l'intera larghezza della pagina. Il testo è di colore blu su sfondo bianco.

Dim InsertStg As String
Dim Inx As Long
Dim Pos As Long

    'Change the body step 1: Create the string to be inserted
    InsertStg = "<table border=0 width=""100%"" style=""Color: #0000FF""" & _
                " bgColor=#FFFFFF><tr><td><p>"
    For Inx = 1 To 10
      InsertStg = InsertStg & "Sentence " & Inx & " of first paragraph. "
    Next
    InsertStg = InsertStg & "</p><p>"
    For Inx = 1 To 10
      InsertStg = InsertStg & "Sentence " & Inx & " of second paragraph. "
    Next

    ' The following adds a signature at the bottom of the message.
    ' "font-family" gives a list of fonts to be tried.  If these are
    ' missing from your computer, use the names of fonts you do have.
    ' "serif" means that if none of the fonts exist any serif font
    ' that exists is to be used.
    InsertStg = InsertStg & "</p><p style = ""font-family: Mistral, " & _
                "Vivaldi, serif; font-size: 14px; color: " & _
                "rgb(127,0,127)"">John Smith<br>5 Acacia Avenue<br>"

    InsertStg = InsertStg & "</p></td></tr></table>"
    'Change the body step 2: Find insertion position just after <Body> element
    Pos = InStr(1, LCase(.HTMLBody), "<body")
    If Pos = 0 Then
      Call MsgBox("<Body> element not found in HTML body", vbCritical)
      Exit Sub
    End If
    Pos = InStr(Pos, .HTMLBody, ">")
    If Pos = 0 Then
      Call MsgBox("Terminating > for <Body> element not found in HTML body", vbCritical)
      Exit Sub
    End If
    'Change the body step 3: Insert my text into body
    .HTMLBody = Mid(.HTMLBody, 1, Pos) & InsertStg & Mid(.HTMLBody, Pos + 1)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top