【问题标题】:VBA Outlook Mail BodyVBA Outlook 邮件正文
【发布时间】:2018-10-05 01:15:48
【问题描述】:

在 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

邮件正文如下:

大家好,

请找到以下信息。

TASK:任务名称

相关任务:RelatedTasks()

文件:我的文件

个人:我的个人

在子函数中,冒号左边的模式总是不变的,右边会根据函数的输入而改变。

为此,我正在阅读包含所需签名的 Template.htm。

Template.htm 包含:

Hello All,

Please find the following information.

TASK: {{mytask}}

RELATED TASK:{{myRelatedTasks}}

FILE : {{myFile}}

PERSON : {{myPerson}}

在 VBA 代码中,我正在替换所有字段。

我面临的问题是 {{mytask}} 和 {{related tasks}} 也应该有一个 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”作为分隔符,但没有成功。

我当前在 Outlook 邮件中的操作:

【问题讨论】:

  • @MathieuGuindon 感谢您的提及。我已经更新了问题。请看一下。
  • @GopalKrishna 尽管我给了你一个答案,但我同意 Mat 这不是一个“问题”,而是听起来你是在要求某人为你编写代码。我在回答中采取了中间道路,给你一个你可以遵循的“计划”。然而,这不是本网站的设计目的。单独询问/研究每个问题会更好。
  • @Blackhawk 感谢您的回答。我会尽力做你推荐的。其实我想要我的相关任务在不同的行。如何实现这个
  • @Blackhawk 我用 "\n" 试过了,它不起作用

标签: vba outlook


【解决方案1】:

这是我为解决同一问题所做的:

  1. 使用您想要的格式写一封电子邮件
  2. 在电子邮件中,为字段使用独特的内容,例如 {{recipient name}}
  3. 将电子邮件另存为 HTML。现在这是您的电子邮件正文模板。您可以为不同的情况保留几个不同的模板。
  4. 在 VBA 中,打开相应的模板文件并将整个内容读入字符串。
  5. 使用 VBA 命令Replace,填写您的字段。例如strHTMLTemplate = Replace(strHTMLTemplate, "{{recipient name}}", "Jane Doe")
  6. 将最终字符串分配给 .htmlBody

对于 RelatedTasks,看起来您只是希望它们位于单行上。在这种情况下,只需在模板中创建一个“字段”{{RelatedTasks}},然后像 strHTMLTemplate = Replace(strHTMLTemplate, "{{RelatedTasks}}", Join(RelatedTasks, ", ")) 那样进行替换。

如果你想变得花哨,你可以编写将字符串数组转换为html的函数lists或tables

【讨论】:

  • 在 TASK 中,如果收件人名称包含引用,如果它包含 在这种情况下如何添加。请帮助
  • @GopalKrishna 我建议将此作为一个单独的问题提出 - StackOverflow 旨在解决个别小问题。现在您有了一个总体计划,将您的问题分解成小块,然后在 Google 上搜索答案。如果找不到答案,请将它们作为新问题发布到 StackOverflow 上。
猜你喜欢
  • 2018-10-11
  • 2017-07-09
  • 2018-11-08
  • 2011-08-30
  • 2017-12-05
  • 2020-10-06
  • 2021-12-16
  • 2015-06-27
  • 2013-04-11
相关资源
最近更新 更多