如何将电子邮件中的矩阵数据替换为userForm文本框中的数据?

时间:2019-06-27 09:56:09

标签: vba outlook

我有一个包含信息和botton的UserForm。当我单击“ Demander证明”时。 (cbAskAttestation),您可以在此处查看:

![introducir la descripción de la imagen aquí

这为我准备了一封电子邮件:

introducir la descripción de la imagen aquí

但是,如何将电子邮件矩阵中的数据替换为用户表单文本框中的数据?我想用用户表单中的文本替换电子邮件表右栏中的文本。例如,用SAP替换电子邮件中的“ GRADE”。

附件

UserForm ufReservistInformations中的数据来自以下代码:

        Sheets("RECAP").Cells(Lig, 2) = cboFunction
        Sheets("RECAP").Cells(Lig, 5) = cboSexReservist
        Sheets("RECAP").Cells(Lig, 6) = cboRankReservist
        Sheets("RECAP").Cells(Lig, 7) = txtIncorporationNumberReservist
        Sheets("RECAP").Cells(Lig, 8) = txtBsnReservist
        Sheets("RECAP").Cells(Lig, 9) = txtBirthdateReservist
        Sheets("RECAP").Cells(Lig, 10) = txtAgeReservist
        Sheets("RECAP").Cells(Lig, 11) = txtBirthplaceReservist
        Sheets("RECAP").Cells(Lig, 12) = txtAddressReservist
        Sheets("RECAP").Cells(Lig, 13) = txtZipcodeReservist
        Sheets("RECAP").Cells(Lig, 15) = txtPhoneReservist
        Sheets("RECAP").Cells(Lig, 17) = txtEmailReservist
        Sheets("RECAP").Cells(Lig, 18) = txtContactReservist
        Sheets("RECAP").Cells(Lig, 19) = txtJobReservist
        Sheets("RECAP").Cells(Lig, 20) = txtEsrReservist
        Sheets("RECAP").Cells(Lig, 21) = cboLengthContractReservist
        Sheets("RECAP").Cells(Lig, 22) = txtEndEsrReservist
        Sheets("RECAP").Cells(Lig, 23) = cboSav1Reservist
        Sheets("RECAP").Cells(Lig, 24) = txtSav1CommentReservist
        Sheets("RECAP").Cells(Lig, 25) = txtRetrainingReservist
        Sheets("RECAP").Cells(Lig, 26) = txtFmaChiefReservist
        Sheets("RECAP").Cells(Lig, 27) = txtVsaReservist
        Sheets("RECAP").Cells(Lig, 28) = txtNextVsaReservist

然后我创建了以下模板的电子邮件:

Sub CreateEmailfromTemplate(ByVal email As String, ByVal pathToTemplate As String)
    Dim obApp As Object
    Dim NewMail As Outlook.MailItem

    Set obApp = Outlook.Application
    'Change the template file folder path according to your case
    Set NewMail = obApp.CreateItemFromTemplate(pathToTemplate)
    With NewMail
        .To = email
    End With
    NewMail.Display

    Set obApp = Nothing
    Set NewMail = Nothing
End Sub

尝试下面描述的RobertBaron的答案

我尝试使用替换功能。

Dim obApp As Object
Dim NewMail As Outlook.MailItem

Set obApp = Outlook.Application
'Change the template file folder path according to your case
Set NewMail = obApp.CreateItemFromTemplate("\\bspp.fr\Travail\CCL1\MTMA\Groupe Adjudant de Compagnie\RESERVISTES\CORRESPONDANCE\Demande d'attestation de recyclage.msg")
With NewMail
    mailBody = .Body
End With

mailBody = Replace(mailBody, "1cl", cboRankReservist)
With NewMail
    .Body = mailBody
End With

NewMail.Display

Set obApp = Nothing
Set NewMail = Nothing

但是结果并不保留数组,而是显示一列单词。确实,这是使用mailBody = Replace(mailBody, "1cl", cboRankReservist)

之后的结果
Bonjour,

J’ai l’honneur de vous demander une attestation de formation continue équipier-secouriste pour le personnel suivant : 


Groupement
1 GIS
Compagnie
20
N° incorporation
91109
Grade
1cl
...

enter image description here

2 个答案:

答案 0 :(得分:0)

此行执行后,NewMail包含一个MailItem

Set NewMail = obApp.CreateItemFromTemplate(pathToTemplate)

您可以使用Body属性获取由模板创建的电子邮件的内容,更改内容,并将Body属性设置为新内容。要设置模板电子邮件中所需的值,可以使用VBA Replace函数,将“ Numero?”,“ Grade?”等替换为其所需的值。

答案 1 :(得分:0)

在Outlook中使用正文的主要方法有三种:

  1. Body
  2. HTMLBody
  3. Inspector类提供WordEditor属性,该属性从代表消息正文的Word对象模型返回Document类的实例。 Outlook使用Word作为电子邮件编辑器。

您可以在Chapter 17: Working with Item Bodies文章中了解有关此内容的更多信息。

由您决定选择哪种方式。但是我认为Word在这种情况下可能会有所帮助。要在Outlook VBA代码中使用这些技术,请使用“工具” |“工具”。引用命令可添加对Microsoft Word对象库的引用。