【问题标题】:Replace text in Outlook template before being displayed在显示之前替换 Outlook 模板中的文本
【发布时间】:2022-08-16 19:55:47
【问题描述】:

我创建了一个 Outlook 模板,我想在其中替换某些部分。

如果我在替换信息之前.display 模板,这将有效。

如果我在显示之前替换,它只会替换一些信息。

下面是我的一段代码:

With Email

    .To = AppLog.Cells(BatchRow, 23).Value
    .Subject = Replace(Email.Subject, \"<Service>\", BatchServiceNumber)
    .Subject = Replace(Email.Subject, \"<BatchNumber>\", BatchNumber)
    .HTMLBody = Replace(Email.HTMLBody, \"%Examiner%\", AppLog.Cells(BatchRow, 22).Value)
    .HTMLBody = Replace(Email.HTMLBody, \"%Service%\", BatchServiceNumber)
    .HTMLBody = Replace(Email.HTMLBody, \"%BatchNumber%\", BatchNumber)

    \'Priority info:
    If BatchServiceNumber = \"2P\" Or BatchServiceNumber = \"2PS\" Then

        .HTMLBody = Replace(Email.HTMLBody, \"%P%\", \"Priority \")
        .HTMLBody = Replace(Email.HTMLBody, \"%Priority%\", \"<br> Please note that this Priority Service has a deadline of two days.<br><br>\")

主题信息、%Examiner%、%Service% 和 %Priority% 被替换,但 %BatchNumber% 和 %P% 没有被替换除非电子邮件会预先显示。

如果找不到任何字段/文档,我不想显示电子邮件。

  • \"如果找不到所需的任何字段/文档,我不想显示电子邮件\" - 你不能在创建电子邮件之前检查一下吗?
  • 这是我实施的当前解决方案,我同意这是最佳实践。我很想知道在我看来是一个错误的起源?
  • 您最初是如何创建邮件的?您可以添加执行此操作的代码吗?
  • 您在调用Display 方法之前和之后看到HTMLBody 字符串有什么不同吗?您确定在调用Display 方法之前存在此类条目吗?

标签: vba email templates replace outlook


【解决方案1】:

首先,不要连续读取和设置HTMLBody 属性,就好像它是一个局部变量一样——访问该属性是相当昂贵的,并且每次设置它时都要接受各种检查。首先使用局部变量读取它,执行乘法替换,然后设置一次属性。

请记住对您设置的所有字符串进行属性 HTML 编码。

最后,作为一般经验法则,当替换不起作用时,请在调试器中检查您正在使用的字符串是否有匹配的子字符串:它可能被回车等破坏。

【讨论】:

    猜你喜欢
    • 2010-12-10
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多