使用可变长度列表中的单元格值填充电子邮件文本
Fill email text with cell values from a list of variable length
我在“A”列中有一个包含公司名称的列表。这些公司的员工在“B”栏中。在“C”列中,他们开始工作的日期。
有些有 10 名员工,有些有 1 名员工。我想发送一封带有标准文本的电子邮件。在该文本中应该有员工的姓名和开始日期。
Sub mailen()
Dim namen As String
Dim r As Range
Dim inhoud As String
Dim names As string
Dim dates As string
inhoud = "Hello client," & "<br>" & _
"Here some text that explains why we send this e-mail." & "<br>" & _
"It is about your employee(s): " & names & " " & "<br>" & _
"These employee(s) are working for you from the dates: " & dates & "." & "<br>"
For Each r In Range("O2", Range("O2").End(xlDown))
If r.Value = r.Offset(-1, 0).Value Then
r.Value = r.Value
Else: namen = r.Value
With CreateObject("Outlook.Application").createitem(0)
.To = namen
.Subject = "Test"
.HTMLbody = inhoud
.attachments.Add ("C:\.pdf")
.send
End With
End If
Next r
End Sub
“O”列是要将电子邮件发送到的电子邮件地址。
我需要用名称填充变量 names
,用日期填充变量 dates
。
试试这个代码:
Sub SubMailen()
'Declarations.
Dim RngMailingAddressList As Range
Dim RngCompanyNameList As Range
Dim RngEmployeeNameList As Range
Dim RngStartingDateList As Range
Dim RngTarget01 As Range
Dim RngTarget02 As Range
Dim StrMailingAddress As String
Dim StrMessage As String
'Setting ranges as the first cell of their column.
Set RngMailingAddressList = Range("O2")
Set RngCompanyNameList = Range("A2")
Set RngEmployeeNameList = Range("B2")
Set RngStartingDateList = Range("C2")
'Resetting ranges to cover the whole list (based upon RngMailingAddressList).
Set RngMailingAddressList = Range(RngMailingAddressList, RngMailingAddressList.End(xlDown))
Set RngCompanyNameList = Range(RngCompanyNameList, RngCompanyNameList.Offset(RngMailingAddressList.Rows.Count - 1))
Set RngEmployeeNameList = Range(RngEmployeeNameList, RngEmployeeNameList.Offset(RngMailingAddressList.Rows.Count - 1))
Set RngStartingDateList = Range(RngStartingDateList, RngStartingDateList.Offset(RngMailingAddressList.Rows.Count - 1))
'Covering each cell in RngMailingAddressList.
For Each RngTarget01 In RngMailingAddressList
'Checking if the address has not been encountered before.
If Excel.WorksheetFunction.CountIf(Range(RngMailingAddressList.Cells(1, 1), RngTarget01), RngTarget01.Value) = 1 Then
'Setting StrMailingAddress.
StrMailingAddress = RngTarget01.Value
'Setting first part of StrMessage.
StrMessage = "Hello client," & "<br>" & _
"Here some text that explains why we send this e-mail." & "<br>" & _
"It is about your employee(s):" & "<br>"
'Covering all the cells in RngCompanyNameList.
For Each RngTarget02 In RngCompanyNameList
'Checking if RngTarget02 has the same company name as the row of the address the mail is about to be sent.
If RngTarget02.Value = Cells(RngTarget01.Row, RngCompanyNameList.Column).Value Then
'Adding name and starting date of the employee to StrMessage.
StrMessage = StrMessage & Cells(RngTarget02.Row, RngEmployeeNameList.Column).Value & " (working for you from " & Cells(RngTarget02.Row, RngStartingDateList.Column).Value & ")" & "<br>"
End If
Next
'Setting and sending the mail.
With CreateObject("Outlook.Application").createitem(0)
.To = StrMailingAddress
.Subject = "Test"
.HTMLbody = StrMessage
.attachments.Add ("C:\.pdf")
.send
End With
End If
Next
End Sub
我认为将员工姓名和开始日期放在一起会更有意义。该代码检查是否已遇到邮件地址,并且每次发送的邮件不超过一封。它根据在给定地址的同一行中指定的公司名称创建员工姓名和开始日期的列表。这意味着如果您有同一家公司的 2 封(或更多)不同的电子邮件,将发送 2 封(或更多)邮件(每封电子邮件 1 封),其中包含员工姓名和开始日期的完整列表给定的公司。代码应该独立于列表的排序顺序工作。
我从来没有通过代码发送过电子邮件,所以我假设您处理此类任务的代码部分以及我集成到我的代码中的代码已经可以正常工作。可以通过添加一种方法来改进代码,以指定消息部分现在设置为“这里是一些解释我们发送此电子邮件的原因的文本”,另一种方法用于指定电子邮件的主题,另一种方法用于指定可能的电子邮件附件。
我在“A”列中有一个包含公司名称的列表。这些公司的员工在“B”栏中。在“C”列中,他们开始工作的日期。
有些有 10 名员工,有些有 1 名员工。我想发送一封带有标准文本的电子邮件。在该文本中应该有员工的姓名和开始日期。
Sub mailen()
Dim namen As String
Dim r As Range
Dim inhoud As String
Dim names As string
Dim dates As string
inhoud = "Hello client," & "<br>" & _
"Here some text that explains why we send this e-mail." & "<br>" & _
"It is about your employee(s): " & names & " " & "<br>" & _
"These employee(s) are working for you from the dates: " & dates & "." & "<br>"
For Each r In Range("O2", Range("O2").End(xlDown))
If r.Value = r.Offset(-1, 0).Value Then
r.Value = r.Value
Else: namen = r.Value
With CreateObject("Outlook.Application").createitem(0)
.To = namen
.Subject = "Test"
.HTMLbody = inhoud
.attachments.Add ("C:\.pdf")
.send
End With
End If
Next r
End Sub
“O”列是要将电子邮件发送到的电子邮件地址。
我需要用名称填充变量 names
,用日期填充变量 dates
。
试试这个代码:
Sub SubMailen()
'Declarations.
Dim RngMailingAddressList As Range
Dim RngCompanyNameList As Range
Dim RngEmployeeNameList As Range
Dim RngStartingDateList As Range
Dim RngTarget01 As Range
Dim RngTarget02 As Range
Dim StrMailingAddress As String
Dim StrMessage As String
'Setting ranges as the first cell of their column.
Set RngMailingAddressList = Range("O2")
Set RngCompanyNameList = Range("A2")
Set RngEmployeeNameList = Range("B2")
Set RngStartingDateList = Range("C2")
'Resetting ranges to cover the whole list (based upon RngMailingAddressList).
Set RngMailingAddressList = Range(RngMailingAddressList, RngMailingAddressList.End(xlDown))
Set RngCompanyNameList = Range(RngCompanyNameList, RngCompanyNameList.Offset(RngMailingAddressList.Rows.Count - 1))
Set RngEmployeeNameList = Range(RngEmployeeNameList, RngEmployeeNameList.Offset(RngMailingAddressList.Rows.Count - 1))
Set RngStartingDateList = Range(RngStartingDateList, RngStartingDateList.Offset(RngMailingAddressList.Rows.Count - 1))
'Covering each cell in RngMailingAddressList.
For Each RngTarget01 In RngMailingAddressList
'Checking if the address has not been encountered before.
If Excel.WorksheetFunction.CountIf(Range(RngMailingAddressList.Cells(1, 1), RngTarget01), RngTarget01.Value) = 1 Then
'Setting StrMailingAddress.
StrMailingAddress = RngTarget01.Value
'Setting first part of StrMessage.
StrMessage = "Hello client," & "<br>" & _
"Here some text that explains why we send this e-mail." & "<br>" & _
"It is about your employee(s):" & "<br>"
'Covering all the cells in RngCompanyNameList.
For Each RngTarget02 In RngCompanyNameList
'Checking if RngTarget02 has the same company name as the row of the address the mail is about to be sent.
If RngTarget02.Value = Cells(RngTarget01.Row, RngCompanyNameList.Column).Value Then
'Adding name and starting date of the employee to StrMessage.
StrMessage = StrMessage & Cells(RngTarget02.Row, RngEmployeeNameList.Column).Value & " (working for you from " & Cells(RngTarget02.Row, RngStartingDateList.Column).Value & ")" & "<br>"
End If
Next
'Setting and sending the mail.
With CreateObject("Outlook.Application").createitem(0)
.To = StrMailingAddress
.Subject = "Test"
.HTMLbody = StrMessage
.attachments.Add ("C:\.pdf")
.send
End With
End If
Next
End Sub
我认为将员工姓名和开始日期放在一起会更有意义。该代码检查是否已遇到邮件地址,并且每次发送的邮件不超过一封。它根据在给定地址的同一行中指定的公司名称创建员工姓名和开始日期的列表。这意味着如果您有同一家公司的 2 封(或更多)不同的电子邮件,将发送 2 封(或更多)邮件(每封电子邮件 1 封),其中包含员工姓名和开始日期的完整列表给定的公司。代码应该独立于列表的排序顺序工作。
我从来没有通过代码发送过电子邮件,所以我假设您处理此类任务的代码部分以及我集成到我的代码中的代码已经可以正常工作。可以通过添加一种方法来改进代码,以指定消息部分现在设置为“这里是一些解释我们发送此电子邮件的原因的文本”,另一种方法用于指定电子邮件的主题,另一种方法用于指定可能的电子邮件附件。