Cómo enviar un mismo correo de respuesta (plantilla guardada en Outlook) al remitente de correo (a, CC)

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

Pregunta

Lo que necesito exactamente es ... recibo los correos continuos del cliente (diferentes clientes) para actualizar sus detalles de activos en la base de datos ... una vez hecho el proceso. Base de datos "(estoy usando plantilla) ... sugiere cómo hacerlo usando VBA ..?

Opción explícita

Public Sub ReplyToAll ()

Dim oexp as outlook.explorer

'Para correos seleccionados en Outlook

Dim OSM como MailItem

Dim onM como 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

Errar:

MsgBox Err.Description, vbCritical

Final

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

seccion 3

Sub respuesta () dim objoutloutlowObject como mailItem

Para cada objOutlookObject en GetCurrenToutLoPlowItems

With objOutlookObject
.ReplyAll.Display

'El código de área de Prob no incluye la plantilla guardada en la ubicación C ..Harta algún error

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

Termine con el siguiente submarino

Function getCurrentOutLoLoTems () como colección Dim objapp como Outlook. Aplicación Dim objitem como objeto Dim colitems como nueva colección

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

Función final

..........

¿Fue útil?

Solución

Lamento que mi comentario fue tan cursi; 500 caracteres no deja mucho espacio para una respuesta completa.

Su pregunta es muy poco clara, por lo que es probable que esté cerrada. Ciertamente, no veo cómo alguien podría responderlo. Es por eso que es importante que intente resolver su propio problema y regrese según sea necesario con preguntas específicas.

A continuación, proporciono enlaces a publicaciones recientes que creo que te ayudará a comenzar. Como dije en mi comentario, mira las publicaciones recientes. Use la instalación de búsqueda. Aquí hay algunas respuestas muy buenas si las busca.

Las dos primeras publicaciones son tutoriales escritos por mí. Los primeros pasos son los mismos, pero, debido a que las preguntas no fueron las mismas, los pasos posteriores son diferentes. Mira ambos y elige los bits relevantes para ti. Las otras publicaciones contienen información que puede encontrar útil.

Cómo importar los datos de correo de Outlook a Excel

Actualizar la hoja de Excel basada en Outlook Mail

¿Alguien podría guiarme para crear una macro de Outlook que haga lo siguiente?

Envíe un correo electrónico desde Excel 2007 VBA utilizando un conjunto de plantillas de Outlook Variables

Uso de Visual Basic para acceder a la subcarpeta en la bandeja de entrada

Evento de VBA Outlook mudanza por correo electrónico

Nueva sección en respuesta a la nueva información del interrogador

A excepción de las modificaciones menores, el código en su pregunta se tomó del archivo de ayuda de Microsoft para NewMailEx Event. Este código solo funcionará si tiene el tipo correcto de instalación y si lo coloca en el lugar correcto:

  • "los Newmailex El evento solo disparará por buzones en Microsoft Outlook que proporcionan notificación para los mensajes recibidos como Microsoft Exchange Server. Además, el evento disparará solo si Outlook se está ejecutando. En otras palabras, no disparará por los nuevos elementos que se reciben en el Bandeja de entrada Cuando Outlook no estaba abierto. Los desarrolladores que desean acceder a estos elementos para los clientes que ejecutan Outlook en una cuenta de correo electrónico de Exchange Server deben implementar su código en el servidor. sin embargo, el Newmailex El evento disparará contra el modo de intercambio en caché en todas las configuraciones: Descargar artículos completos, Descargar encabezados, y Descargar encabezados y luego elementos completos."

¿Tiene el tipo correcto de instalación? ¿Puede colocar su código en el servidor? Incluso si este es el enfoque correcto para la versión final de su macro, no creo que sea el enfoque correcto mientras aprende VBA y Outlook.

Necesitas dos cosas:

  1. Una especificación detallada de la macro que desea escribir y
  2. Más comprensión de VBA y Outlook.

Dudo que pueda crear la especificación detallada todavía porque no sabe lo suficiente sobre VBA y Outlook. Pero podemos enumerar las cosas que necesitará saber:

  • ¿Cómo se escribe en su base de datos desde Outlook?
  • ¿Cómo identifica los elementos de correo que desea grabar? En su ejemplo, está buscando un tema de "hola" y respondiendo "hola". Esto está bien para un primer experimento, pero debe identificar el método real. ¿Es un nuevo remitente? ¿Hay información específica en el cuerpo del mensaje? ¿Un humano tiene que identificar tales elementos de correo?
  • En su ejemplo, tiene una carpeta "personal" en "Bandeja de entrada". Muchas personas parecen tener este tipo de estructura de carpetas y los ejemplos de Microsoft tienden a usar carpetas como esta. Yo no. Tengo una carpeta llamada "! Inicio". Bajo esto tengo carpetas para "seguro", "compras", "dinero". Bajo estas tengo carpetas para mis diferentes proveedores. Una vez que he tratado con un mensaje, lo muevo a la carpeta apropiada. Las respuestas van a la misma carpeta. Este es mi sistema y funciona para mí. ¿Cuál será su sistema? ¿Habrá, por ejemplo, una sola carpeta para todos los clientes o uno por cliente?

Lo anterior es una lista de inicio de preguntas para su especificación, pero también es una lista de inicio de cosas que necesita saber.

Tal vez tienes un jefe que quiere que dejes de perder el tiempo y comiences a escribir la macro, pero aún no sabes lo suficiente para planificar la macro final.

Comience con mis tutoriales. Los primeros tres pasos son sobre la estructura de la carpeta. Estos pasos son esenciales si tiene el tipo de estructuras de carpetas complejas que tengo. A continuación, reviso una carpeta que muestra información seleccionada de cada elemento de correo. Tengo pasos en los que escribo cuerpos de mensajes para disco. Te sugiero que pases por ambos tutoriales y pruebes mi código. No todo será inmediatamente útil, pero es una buena información de fondo.

¿Cuál es su base de datos? ¿Es acceso o Excel? Hay algo de ayuda en mis tutoriales y en los otros enlaces anteriores con la escritura a Excel que podría adaptar para el acceso.

Creo que lo anterior es suficiente por ahora. Tómelo lentamente y comenzará a tener sentido. Todavía recuerdo la primera vez que intenté escribir una macro de Outlook, así que entiendo tu confusión. Prometo que quedará claro. La mejor de las suertes.

Nueva sección en respuesta al siguiente comentario:

  • "Hola, lo he intentado ... Got lo que quiero ... eliminé mi código anterior ... e intenté reemplazar el nuevo código ... Ahora se necesita poca ayuda ... ¿hay alguna forma de usar el mismo formato que cuando nosotros Haga clic en el botón Responder en Outlook .. Mi código funciona bien ... ProB es el formato del correo es diferir ... "

Problema 1

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

Estás usando el cuerpo de texto. Creo que quieres el cuerpo HTML. Probar:

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

Problema 2

No puede agregar al cuerpo HTML de esta manera. El cuerpo HTML será:

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

Debe agregar su texto al comienzo del cuerpo; es decir, justo después <body>. Si solo agrega su texto, aceptará cualquier estilo, márgenes y colores que el remitente haya usado. El siguiente código agrega algún texto que se ve igual en cada correo electrónico con el que lo he probado. Mi texto está dentro de una tabla con una sola celda. La tabla cubre el ancho completo de la página. El texto es azul sobre un fondo blanco.

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top