Donnie1ben
New member
- Local time
- Today, 20:48
- Joined
- Aug 15, 2022
- Messages
- 17
I have a MS Access table and want to send an email to each record in the table in a table format. For row in the table bearing same city or Country, I expect the outlook email to have those records in one table.
I have included a dummy table whose records I would retrieve using an SQL query: SELECT * FROM DummyTable (like in Dummyimage) I have created the table in vba using this solution I found here
My ideal solution would result in this table as the email body if I want to send an email to names in my table whose country are TRNC in "Dummyimage1" and for country UK a separate table for the email body as in "Dummyimage2"
My approach would be to create an array to hold the records from the DummyTable and then loop through each record and create a table for records with same country names, but my implementation fails me and I've been on this for 2 weeks.
I have included a dummy table whose records I would retrieve using an SQL query: SELECT * FROM DummyTable (like in Dummyimage) I have created the table in vba using this solution I found here
Code:
Public Sub NewEmail()
Dim olApp As Object
Dim olItem As Variant
Dim db As DAO.Database
Dim rec As DAO.Recordset
Dim strQry As String
Dim aHead(1 To 7) As String
Dim aRow(1 To 7) As String
Dim aBody() As String
Dim lCnt As Long
'Create the header row
aHead(1) = "Request Type"
aHead(2) = "ID"
aHead(3) = "Title"
aHead(4) = "Requestor Name"
aHead(5) = "Intended Audience"
aHead(6) = "Date of Request"
aHead(7) = "Date Needed"
lCnt = 1
ReDim aBody(1 To lCnt)
aBody(lCnt) = "<HTML><body><table border='2'><tr><th>" & Join(aHead, "</th><th>") & "</th></tr>"
'Create each body row
strQry = "SELECT * From Email_Query"
Set db = CurrentDb
Set rec = CurrentDb.OpenRecordset(strQry)
If Not (rec.BOF And rec.EOF) Then
Do While Not rec.EOF
lCnt = lCnt + 1
ReDim Preserve aBody(1 To lCnt)
aRow(1) = rec("Test1")
aRow(2) = rec("Test2")
aRow(3) = rec("Test3")
aRow(4) = rec("Test4")
aRow(5) = rec("Test5")
aRow(6) = rec("Test6")
aRow(7) = rec("Test7")
aBody(lCnt) = "<tr><td>" & Join(aRow, "</td><td>") & "</td>
</tr>"
rec.MoveNext
Loop
End If
aBody(lCnt) = aBody(lCnt) & "</table></body></html>"
'create the email
Set olApp = CreateObject("Outlook.application")
Set olItem = olApp.CreateItem(0)
olItem.display
olItem.To = "example@example.com"
olItem.Subject = "Test E-mail"
olItem.htmlbody = Join(aBody, vbNewLine)
olItem.display
End Sub
My ideal solution would result in this table as the email body if I want to send an email to names in my table whose country are TRNC in "Dummyimage1" and for country UK a separate table for the email body as in "Dummyimage2"
My approach would be to create an array to hold the records from the DummyTable and then loop through each record and create a table for records with same country names, but my implementation fails me and I've been on this for 2 weeks.