Excel - 在VBA中将占位符与有效值匹配

时间:2016-12-27 01:25:17

标签: excel vba excel-vba email

我想制作一个可编辑的电子邮件模板,每个人都可以更新电子邮件并指定要向哪个用户发送哪封电子邮件。电子邮件模板来自另一张表。每个模板都有自己的电子邮件ID。 enter image description here

我希望将模板与包含所有所需信息的表进行匹配。因此,每当用户输入电子邮件ID时,它都会使用电子邮件模板中的占位符映射值。enter image description here

到目前为止,这是我一直在使用电子邮件模板。但是现在它只是抓住了细胞的所有价值。每当我添加列或行时哪个都可以破解。

   Sub Mail_with_outlook2()

   Dim mainWB As Workbook
   Dim otlApp As Object
   Dim olMail As Object
   Dim olMailItem As Object
   Dim Doc As Object
   Dim SendID
   Dim CCID
   Dim Subject
   Dim Body
   Dim WrdRng As Object
   Dim result
   Dim i As Long



   Set otlApp = CreateObject("Outlook.Application")
   Set olMail = otlApp.CreateItem(0)
   Set mainWB = ActiveWorkbook

   SendID = mainWB.Sheets("Email Template").Range("C3").Value
   CCID = mainWB.Sheets("Email Template").Range("D3").Value
   Subject = mainWB.Sheets("Email Template").Range("E3").Value
   Body = mainWB.Sheets("Email Template").Range("F3").Value


   Dim splitBody
   splitBody = Split(Body, "<%")

   For i = 0 To UBound(splitBody)

    result = Replace(Body, ">", "K")

   Next i


   With olMail
   .to = SendID
   If CCID <> "" Then
    .CC = CCID
   End If
  .Subject = Subject
  .Display
   End With
   Set Doc = olMail.GetInspector.WordEditor
   Set WrdRng = Doc.Range(Start:=0, End:=0)
   WrdRng.Select
   mainWB.Sheets("Email Template").Range("F3").Copy
   WrdRng.Paste

    MsgBox ("you Mail has been sent to " & SendID)
   End Sub

1 个答案:

答案 0 :(得分:1)

表+匹配功能

考虑将模板表数据转换为Excel表格。然后你可以使用&#34;表对象&#34;又名。 ListObject按名称(列标题)引用它的列。

要查找表格内ID的相对位置,您可以使用WorksheetFunction.Match

带示例的代码

在我的代码中,名为邮件模板参数的工作表被称为&#34; IssueTemplates&#34;。
该表名为&#34; IssueTemplatesTable&#34;。

Sub GetDataFromTable()
    Dim IssueTemplatesTable As ListObject
    Dim ID_Searched As Integer 'Input variable
    Dim ID_RelativeRow As Integer 'Input relative row inside the table
    Dim Var1 As String 'Output variable

    Set IssueTemplatesTable = ThisWorkbook.Sheets("IssueTemplates").ListObjects("IssueTemplatesTable")

    '''''''''''''''''EXAMPLE 1'''''''''''''''''''''''''
    ID_Searched = 17 'Input: "No" of template
    With IssueTemplatesTable
        ID_RelativeRow = WorksheetFunction.Match(ID_Searched, .ListColumns("No").DataBodyRange, 0)
        Var1 = .DataBodyRange(ID_RelativeRow, .ListColumns("Issue Type").Index)
    End With 'IssueTemplatesTable

    MsgBox Var1 'Output: "Others"

    '''''''''''''''''EXAMPLE 2'''''''''''''''''''''''''
    ID_Searched = 25 'Input: "No" of template
    With IssueTemplatesTable
        ID_RelativeRow = WorksheetFunction.Match(ID_Searched, .ListColumns("No").DataBodyRange, 0)
        Var1 = .DataBodyRange(ID_RelativeRow, .ListColumns("Issue Type").Index)
    End With 'IssueTemplatesTable

    MsgBox Var1 'Output: "Mapping"
End Sub