Как отправить одно и то же ответное письмо (шаблон сохранен в outlook) отправителю (to, cc) - PullRequest
0 голосов
/ 11 января 2012

Что мне в точности нужно, так это ... я получаю постоянные письма от клиентов (разных клиентов), чтобы обновить информацию об их активах в базе данных ... как только процесс завершен ... я должен ответить (включая cc) из их почты, говоря "детали активов"Успешно хранится в базе данных "(использую шаблон) ... Подскажите, как это сделать с помощью VBA ..?

Опция Явная

Public Sub ReplyToAll ()

Dim oExp As Outlook.Explorer

'для выбранных писем в outlook

Dim oSM As mailItem

Dim oNM As 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

Ошибка:

MsgBox Err.Description, vbCritical

End Sub

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

секция 3

Sub ReplyAll () Dim objOutlookObject As mailItem

для каждого objOutlookObject в GetCurrentOutlookItems

With objOutlookObject
.ReplyAll.Display

'код области пробы не включает в себя шаблон, сохраненный в расположении, с.

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

Завершить со следующим концом Sub

Функция GetCurrentOutlookItems () As Collection Dim objApp As Outlook.Application Dim objItem As Object Dim colItem 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

Завершить функцию

..........

1 Ответ

1 голос
/ 13 января 2012

Мне жаль, что мой комментарий был таким кратким; 500 символов не оставляют много места для полного ответа.

Ваш вопрос очень неясен, поэтому, скорее всего, он будет закрыт. Конечно, я не вижу, как кто-то мог ответить на это. Вот почему важно, чтобы вы попытались решить собственную проблему и при необходимости вернулись с конкретными вопросами.

Ниже я приведу ссылки на последние сообщения, которые, как я считаю, помогут вам начать работу. Как я уже сказал в своем комментарии, просмотрите последние сообщения. Используйте средство поиска. Здесь вы найдете несколько очень хороших ответов, если вы их найдете.

Первые два сообщения написаны мной. Первые шаги одинаковы, но, поскольку вопросы были не совсем одинаковыми, более поздние шаги отличаются. Посмотрите на оба и выберите нужные вам биты. Все остальные сообщения содержат информацию, которая может оказаться вам полезной.

Как импортировать данные почты Outlook в Excel

обновление таблицы Excel на основе почты Outlook

Может ли кто-нибудь помочь мне в создании макроса Outlook, который выполняет следующее

отправить электронное письмо из Excel 2007 vba, используя переменные набора шаблонов outlook

использование Visual Basic для доступа к подпапке в папке входящих

электронная почта VBA Outlook, перемещаемая

Новый раздел в ответ на новую информацию от спрашивающего

За исключением незначительных изменений, код в вашем вопросе был взят из файла справки Microsoft для NewMailEx Event. Этот код будет работать только в том случае, если вы установили правильный тип установки и разместили его в правильном месте:

  • " Событие NewMailEx будет срабатывать только для почтовых ящиков в Microsoft Outlook, которые предоставляют уведомления для полученных сообщений, таких как Microsoft Exchange Server. Кроме того, это событие будет срабатывать только в том случае, если Outlook работает. Другими словами, он не будет запускаться для новых элементов, полученных в Входящие , когда Outlook не был открыт. Разработчикам, которые хотят получить доступ к этим элементам для клиентов, использующих Outlook на учетной записи электронной почты сервера Exchange, необходимо реализовать их код на сервере. Однако событие NewMailEx будет запускаться в режиме кэширования Exchange во всех настройках: Загрузка полных элементов , Загрузка заголовков и Загрузите заголовки, а затем полные элементы ."

У вас есть правильный тип установки? Можете ли вы разместить свой код на сервере? Даже если это правильный подход к финальной версии вашего макроса, я не верю, что это правильный подход при изучении VBA и Outlook.

Вам нужны две вещи:

  1. подробная спецификация макроса, который вы хотите написать, и
  2. больше понимания VBA и Outlook.

Я сомневаюсь, что вы можете создать детальную спецификацию еще, потому что вы недостаточно знаете о VBA и Outlook. Но мы можем перечислить вещи, которые вам нужно знать:

  • Как вы пишете в базу данных из Outlook?
  • Как определить почтовые отправления, которые вы хотите записать? В вашем примере вы проверяете предмет «Привет» и отвечаете «Привет». Это хорошо для первого эксперимента, но вам нужно определить реальный метод. Это новый отправитель? Есть ли конкретная информация в теле сообщения? Должен ли человек идентифицировать такие почтовые отправления?
  • В вашем примере у вас есть папка "Личные" в разделе "Входящие".Многие люди, похоже, имеют такой тип структуры папок, и примеры Microsoft, как правило, используют подобные папки.Я не буду.У меня есть папка с именем "! Home".Под этим у меня есть папки для «Страхование», «Покупки», «Деньги».Под ними у меня есть папки для разных поставщиков.Разобравшись с сообщением, я перемещаю его в соответствующую папку.Ответы отправляются в ту же папку.Это моя система, и она работает для меня.Какой будет ваша система?Например, будет ли одна папка для всех клиентов или по одной на каждого клиента?

Выше приведен начальный список вопросов для вашей спецификации, но также и начальный список того, что вам нужнознать.

Возможно, у вас есть начальник, который хочет, чтобы вы прекратили тратить время и начали писать макрос, но вы еще недостаточно знаете, чтобы планировать окончательный макрос.

Начните с моих уроков.Первые три шага о структуре папок.Эти шаги необходимы, если у вас есть сложные структуры папок, которые у меня есть.Далее я просматриваю папку, отображающую выбранную информацию от каждого почтового элемента.У меня есть шаги, в которых я пишу тела сообщения на диск.Я предлагаю вам пройти оба урока и попробовать мой код.Не все это будет полезно сразу, но это хорошая справочная информация.

Какая у вас база данных?Это Access или Excel?В моих руководствах и других ссылках, приведенных выше, есть некоторая помощь по написанию в Excel, которую вы можете адаптировать для Access.

Я думаю, что на данный момент этого достаточно.Возьми это медленно, и это начнет иметь смысл.Я до сих пор помню первый раз, когда я пытался написать макрос Outlook, чтобы понять вашу путаницу.Я обещаю, что это станет ясно.Удачи.

Новый раздел в ответ на следующий комментарий:

  • "Привет, я попробовал .. Получил то, что я хочу .... Удаленомой предыдущий код .. и попытался заменить новый код .. Теперь вам нужна небольшая помощь .... есть ли способ использовать тот же формат, как когда мы нажимаем кнопку answerall в outlook .. мой код работает нормально ..формат письма отличается .. "

Задача 1

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

Вы используете текстовое тело.Я думаю, что вы хотите тело HTML.Попробуйте:

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

Задача 2

Таким способом вы не можете добавить текст HTML.Тело HTML будет следующим:

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

Вы должны добавить свой текст в начало тела;то есть сразу после <body>.Если вы просто добавите свой текст, вы примете любой стиль, поля и цвета, которые использовал отправитель.Следующий код добавляет текст, который выглядит одинаково в каждом письме, с которым я его пробовал.Мой текст находится в таблице с одной ячейкой.Таблица покрывает всю ширину страницы.Текст синий на белом фоне.

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)
...