我正在尝试遍历Access VBA中的记录集。然后将结果输出到Outlook项目的电子邮件正文中的HTML格式表。我已经能够遍历记录集中的所有记录,只要它没有格式化为HTML。
一旦插入HTML字符串,循环就无法在电子邮件正文中返回多条记录。
Debug.Print计算记录集中适当数量的记录,但HTML表只返回标题和一条记录。
以下代码根据查询参数打印整个记录集。所有行都以文本格式返回,并以每个数据元素管道分隔:
conf95 = [b + bse * tinv(.025, df_r), b + bse * tinv(.975, df_r)];
但是,当我尝试在HTML表格中格式化结果时,只返回标题集的标题和第一行。请参阅以下代码:
Set dbs = CurrentDb()
Set qdf = dbs.QueryDefs("qryNewRequest")
qdf.Parameters(0) = Me![hdr_ID]
Set rst = qdf.OpenRecordset()
With rst
Do While Not rst.EOF
Mailbody = Mailbody & ![hdr_req_date] & " | " & ![usr_name] & _
" | " & ![hdr_department] & " | " & ![dtl_req_eff_date] & _
" | " & ![dtl_chg_cpt] & " | " & ![dtl_chg_rev] & _
" | " & ![dtl_chg_price] & " | " & ![reason] & vbCrLf
rst.MoveNext
Loop
End With
Set olApp = CreateObject("Outlook.application")
Set olItem = olApp.CreateItem(0)
olItem.display
olItem.To = "me@mymail.com"
olItem.Subject = "New Request"
olItem.body = Mailbody
直接从Access表单运行查询会相应地传递参数,并返回正确数量的记录。电子邮件项目是在两种方法中创建的,所以我认为我的问题出在sub的HTML中。如上所述,记录集的intCount上的Debug.Print根据查询返回适当数量的记录。
我错过了一些简单的东西吗?在过去的几天里我做了很多搜索和搜索,所以如果我错过了另一个有答案的帖子,我会道歉。这是我的第一篇文章,所以当我学习网站规则和礼仪时,请耐心等待。
谢谢
答案 0 :(得分:0)
问题是您始终将当前记录追加到strHTML
,因此它只会包含添加到strHTML
的最后一条记录。
而是使用MailBody
初始化strHTML
并在每个循环中附加MailBody
,就像在纯文本版本中一样。
strHTML = "<HTML><Body><table border='1' width='50%'><tr><th>Request Date</th><th>Submitted By</th>" & _
"<th>Department</th><th>Effective Date</th><th>Description</th></tr>"
' Initialize Mailbody
Mailbody = strHTML
With rst
Do While Not rst.EOF
' Here you append the current record to the end of the Mailbody variable.
Mailbody = Mailbody & "<tr><td>" & rst("hdr_req_date") & "</td><td>" & _
rst("usr_name") & "</td><td>" & rst("hdr_department") & "</td><td>" & _
rst("dtl_req_eff_date") & "</td><td>" & rst("dtl_chg_desc") & "</td></tr>" & _
vbCrLf
rst.MoveNext
Loop
End With