Я делаю подобные вещи во многих своих приложениях.Я вставляю полевые ссылки в свои шаблоны электронной почты и затем использую написанную мной процедуру, чтобы динамически заменять их правильными значениями во время выполнения.В моем случае это обычно делается в цикле с RecordSet, который содержит несколько человек, каждый из которых получает отдельную копию сообщения электронной почты, и я настраиваю шаблон для каждого получателя.
Вот небольшой примершаблон электронной почты:
<p>Hello [RecipFirstName],</p> This auto-generated email has been sent to notify you that:
<h4>Approval Mailed is <b>LATE</b>.</h4>
Approval Mailed Date: [ApprovalMailed_Date]
[ProjectTemplate1]
Тогда мой код для заполнения шаблона выглядит следующим образом:
'[mBody] is a string that will be the Body of the email
'[templateBody] is a string that was previously set to the email
' template for the message being processed
'[rstProject] is a DAO.RecordSet that was previously set to the
' required dataset for my purposes
'Notice that I use a combination of [Replace] functions and
' my custom function [sitsProcessFieldReferences] to update the
' template with the appropriate values.
'In my case, replace CRLF in the template with <BR>
mBody = Replace(templateBody, vbCrLf, "<BR>")
mBody = sitsProcessFieldReferences(mBody, rstProject)
'The following examples use variables I have already defined and
' populated to replace the field refernces.
mBody = Replace(mBody, "[RecipFirstName]", FirstName)
mBody = Replace(mBody, "[RecipLastName]", LastName)
mBody = Replace(mBody, "[RecipFullName]", FirstName & " " & LastName)
mBody = Replace(mBody, "[ProjectTemplate1]", pTemplate1)
Наконец функция, которая выполняет замену ссылки на поле.Обратите внимание, что у меня есть особый случай, когда я называю ссылку на поле с именем «цена» в названии, я хочу, чтобы значение замены было отформатировано как Валюта.Вы можете настроить этот код для любой ситуации.Просто требуется некоторое предварительное планирование, чтобы сохранить согласованное соглашение об именах для ваших ссылок на поля.
Эта функция берет шаблон электронной почты (или любую текстовую строку) и ищет в нем имена полей, соответствующие любому полю в RecordSet (прилагается).в квадратных скобках) и заменяет эту ссылку значением из соответствующего поля в RecordSet
Public Function sitsProcessFieldReferences(ByVal orgString As String, rstFields As DAO.Recordset) As String
On Error GoTo Err_PROC
Dim ErrMsg As String
Dim fld As DAO.Field
For Each fld In rstFields.Fields
If InStr(fld.Name, "price") Then
orgString = Replace(orgString, "[" & fld.Name & "]", Format(Nz(fld.Value, 0), "Currency"))
Else
orgString = Replace(orgString, "[" & fld.Name & "]", Nz(fld.Value, ""))
End If
Next fld
Set fld = Nothing
Exit_PROC:
sitsProcessFieldReferences = orgString
Exit Function
Err_PROC:
Select Case Err.Number
Case Else
ErrMsg = "Module: " & strModName & vbCrLf
ErrMsg = ErrMsg & "Error: " & Err.Number & vbCrLf
ErrMsg = ErrMsg & "Line: " & Erl() & vbCrLf
ErrMsg = ErrMsg & Err.Description
DoCmd.Hourglass False
MsgBox ErrMsg, vbOKOnly + vbCritical, "Function sitsProcessFieldReferences"
Resume Exit_PROC
Resume
End Select
End Function
В шаблоне электронной почты вы измените следующую строку:
Hi " & Me:PersonName & ", how are you?
что-то вроде:
Hi [PersonName], how are you?
Затем либо сделайте Replace(emailTemplate, [PersonName], "Bob")
, если у вас уже есть замещающие значения в переменной, либо что-то в этом роде.
ИлиЕсли значение находится в RecordSet, вы должны изменить [PersonName]
в шаблоне, чтобы оно совпадало с именем поля в RecordSet, которое содержит значение Bob
, а затем использовать мою пользовательскую функцию: sitsProcessFieldReferences(emailTemplate, YourRecordSet)