VBA Outlook Mail Body - PullRequest
       9

VBA Outlook Mail Body

0 голосов
/ 24 апреля 2018

В сценариях VBA я пытаюсь написать вспомогательную функцию со следующей подписью

Sub(taskName As String , myGroup As String, myFile As String ,myPer As String, RelatedTasks() As String    )

 Dim olApp As Outlook.Application
 Dim m As Outlook.MailItem

 Set olApp = New Outlook.Application
 Set m = olApp.CreateItem(olMailItem)

 With m
   .display
   .To = "somewhere@someplace.com"
   .Subject = "Test Events"
   .HTMLBody/.body = ...    
End Sub

Тело электронной почты выглядит следующим образом:

Hello All,

Пожалуйста, найдите следующую информацию.

ЗАДАЧА : имя задачи

ЗАДАЧА, СВЯЗАННАЯ : RelatedTasks ()

FILE : myFile

PERSON : myPer

В функции Sub шаблон слева от двоеточия всегда постоянен. И правая сторона будет меняться в зависимости отвходные данные для функции.

Для этого я читаю Template.htm, который содержит необходимую подпись.

Template.htm содержит:

Hello All,

Please find the following information.

TASK: {{mytask}}

RELATED TASK:{{myRelatedTasks}}

FILE : {{myFile}}

PERSON : {{myPerson}}

В коде VBA,Я заменяю все поля.

Проблема, с которой я сталкиваюсь, это {{mytask}}, и {{связанные задачи}} также должны иметь ссылку на HTML.Мне удалось добавить ссылку на mytask. Нажатие на mytask в почте приведет к переходу на соответствующую веб-ссылку.

<a href = "www.something.com&amp;id ={{taskID}}>
{{mytask}}.....<a href = "www.xxx.com&amp;id={{}}>{{myRelatedTasks}}

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

Мой код VBA:

Option Explicit

Sub CreateNewMail()

 Dim olApp As Outlook.Application
 Dim m As Outlook.MailItem
 Dim sigPath As String, sigText As String
 Dim fso As Scripting.FileSystemObject
 Dim ts As Scripting.TextStream

 Dim t As String
 Dim r(5) As Variant

 t = "233444:dshfjhdjfdhjfhjdhfjdhfjd"


 r(0) = "122343:dsjdhfjhfjdh"
 r(1) = "323243:jfjfghfjhjddj"
 r(2) = "834783:gffghjkjkgjkj"

 Set olApp = New Outlook.Application
 Set m = olApp.CreateItem(olMailItem)

 sigPath = "C:\Users\Pavan-Kumar\Desktop\vbs\TestEvents.htm"

 Set fso = New Scripting.FileSystemObject
 Set ts = fso.OpenTextFile(sigPath)

 sigText = ts.ReadAll

 ts.Close

 Set fso = Nothing

 sigText = Replace(sigText, "{{mytask}}", t)
 sigText = Replace(sigText, "{{myRelatedTasks}}", Join(r, "<br>"))

 With m
   .display
   .To = "somewhere@someplace.com"
   .Subject = "Test Events"
   .HTMLBody = sigText

 End With 
End Sub

А также, когда я присоединяюсь к связанным задачам, я хочу, чтобы они шли один за другим с отступом.Я попытался сделать это, указав "\ t" в качестве разделителя, но безуспешно.

Мой текущий O / P в Outlook Outlook:

enter image description here

1 Ответ

0 голосов
/ 24 апреля 2018

Вот что я сделал, чтобы решить ту же проблему:

  1. Напишите письмо в том формате, который вам нужен
  2. В письме используйте что-то уникальное для полей, например {{recipient name}}
  3. Сохранить письмо как HTML. Теперь это ваш шаблон для тела письма. Вы можете оставить несколько разных шаблонов для разных ситуаций.
  4. В VBA откройте соответствующий файл шаблона и прочитайте все это в строку.
  5. С помощью команды VBA Replace заполните свои поля. Например strHTMLTemplate = Replace(strHTMLTemplate, "{{recipient name}}", "Jane Doe")
  6. Назначить последнюю строку для .htmlBody

Для связанных задач похоже, что вы просто хотите, чтобы они были в одном ряду. В этом случае просто создайте «поле» в вашем шаблоне {{RelatedTasks}}, а затем выполните замену, например, strHTMLTemplate = Replace(strHTMLTemplate, "{{RelatedTasks}}", Join(RelatedTasks, ", ")).

Если вы хотите получить фантазию, вы можете написать функции, которые преобразуют массивы строк в html списки или таблицы

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