Excel-将占位符与VBA中的有效值匹配
我想做一个可编辑的电子邮件模板,每个人都可以更新电子邮件,并分配给哪个用户,他们想发送哪封电子邮件。电子邮件模板来自另一个工作表。每个模板都有自己的电子邮件ID。 我想将模板与包含所有所需信息的表相匹配。因此,每当用户输入电子邮件ID时,它都会在电子邮件模板中用占位符映射该值 到目前为止,我一直在使用电子邮件模板。但现在它只是从单元格中获取所有值。每当我添加列或行时,它都是可断开的Excel-将占位符与VBA中的有效值匹配,vba,excel,email,Vba,Excel,Email,我想做一个可编辑的电子邮件模板,每个人都可以更新电子邮件,并分配给哪个用户,他们想发送哪封电子邮件。电子邮件模板来自另一个工作表。每个模板都有自己的电子邮件ID。 我想将模板与包含所有所需信息的表相匹配。因此,每当用户输入电子邮件ID时,它都会在电子邮件模板中用占位符映射该值 到目前为止,我一直在使用电子邮件模板。但现在它只是从单元格中获取所有值。每当我添加列或行时,它都是可断开的 Sub Mail_with_outlook2() Dim mainWB As Workbook
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
Sub-Mail_与_-outlook2()
将主WB设置为工作簿
作为对象的Dim otlApp
将邮件作为对象
将邮件项设置为对象
Dim Doc作为对象
暗森迪
暗淡的CCID
模糊主题
暗体
作为对象的Dim WrdRng
模糊结果
我想我会坚持多久
设置otlApp=CreateObject(“Outlook.Application”)
设置olMail=otlApp.CreateItem(0)
设置mainWB=ActiveWorkbook
SendID=mainWB.Sheets(“电子邮件模板”).Range(“C3”).Value
CCID=mainWB.Sheets(“电子邮件模板”).范围(“D3”).值
主题=主工作表(“电子邮件模板”)。范围(“E3”)。值
Body=mainWB.Sheets(“电子邮件模板”).范围(“F3”).值
暗分裂体
拆分体=拆分(体,“,”K”)
接下来我
与奥尔梅尔
.to=SendID
如果CCID为“”,则
.CC=CCID
如果结束
.主语
.展示
以
Set Doc=olMail.GetInspector.WordEditor
设置WrdRng=Doc.Range(开始=0,结束=0)
WrdRng.选择
主工作表(“电子邮件模板”)。范围(“F3”)。副本
干糊
MsgBox(“您的邮件已发送到”&SendID)
端接头
表格+匹配功能
考虑将模板工作表数据转换为Excel表格。然后可以使用“表对象”akaListObject
以名称(列标题)引用其列
要查找表中ID的相对位置,可以使用WorksheetFunction.Match
用示例编写代码
在我的代码中,邮件模板参数所在的工作表称为“IssueTemplates”。该表称为“IssueTemplatesTable”
因此,您希望使模板工作表更灵活,以便可以添加列,并且VBA仍将获得正确的值?我不清楚你的问题是什么。是的,我想通过定义占位符和在其他工作表中分配电子邮件ID来编辑电子邮件模板。它将用行中的有效值替换该值
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