需要循环遍历记录集以在Outlook电子邮件正文中插入HTML表

时间:2016-04-27 00:59:46

标签: html vba

我正在尝试遍历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根据查询返回适当数量的记录。

我错过了一些简单的东西吗?在过去的几天里我做了很多搜索和搜索,所以如果我错过了另一个有答案的帖子,我会道歉。这是我的第一篇文章,所以当我学习网站规则和礼仪时,请耐心等待。

谢谢

1 个答案:

答案 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