如何在Access中以CSV格式通过电子邮件发送查询结果

时间:2019-09-10 13:31:26

标签: vba email ms-access export-to-csv

我有一个访问数据库,想要将查询结果保存为CSV格式并通过Outlook通过电子邮件发送。有办法吗?

我已经尝试过DoCmd.TransferText命令,但找不到“ Specific”

Public Sub export_query()
    DoCmd.TransferText acExportDelim, "Specific", "Query1", "C:\test\Query1.txt", True
End Sub

1 个答案:

答案 0 :(得分:1)

如果要使用规范,则需要首先通过向导手动导出为文本。您可能没有保存规范,或者使用了错误的名称。

  1. 打开查询。
  2. 在功能区上,选择External Data标签。
  3. 选择Export to text的选项。 (或者,您可以在导航窗格中右键单击查询,然后导出为文本)
  4. 向导显示后,请勿选中提供给您的任何选项,然后单击OK
  5. 在助手屏幕中,单击Advanced
  6. 根据自己的喜好设置规格。
  7. 单击Save as保存您的规范并为其命名。

确保在DoCmd.TransferText的规范字段中使用此名称。另外,将输出文件名参数的扩展名更改为.csv,而不是.txt

您可以使用以下功能导出和通过电子邮件发送.csv

Sub export_query()
    Dim objOutlook As Outlook.Application
    Dim objMail As Outlook.MailItem

    Set objOutlook = CreateObject("Outlook.Application")
    Set objMail = objOutlook.CreateItem(olMailItem)

    ' Export to CSV
    DoCmd.TransferText acExportDelim, "Specific", "Query1", "C:\test\Query1.csv", True
    ' You could also try it without any specifications. (Untested)
    ' DoCmd.TransferText acExportDelim, "", "Query1", "C:\test\Query1.csv", True

    ' Send the email
    With objMail
        .To = "John@Doe.com"
        .Subject = "This is the subject."
        .Body = "This is the body."
        .Attachments.Add ("C:\test\Query1.csv")
        .Display '(If you want to see the email and send it yourself)
        '.Send '(If you want to send the email without seeing it)
    End With

    ' Clean up the objects
    Set objMail = Nothing
    Set objOutlook = Nothing
End Sub