[英]VBA excel range export to PDF, save and email using outlook not working
[英]Export access report as pdf and attach to Outlook email using VBA
我有一個員工數據庫,可以創建(除其他外)每月工資單和個人工資單。 個人工資單是一個基於查詢的報告,該查詢執行所有過濾(月份、員工),從具有月份和員工字段的未綁定表單中選取輸入參數。
工資單報告在報告視圖(不是打印預覽)中打開,上面有一個命令按鈕,可以將報告以 PDF 格式保存到特定文件夾,啟動 Outlook 並格式化 email 消息(收件人、主題、正文等...)。
到目前為止一切順利 - 命令按鈕確實以 PDF 格式將報告保存到指定文件夾,正確命名,打開 Outlook email,正確格式化 email...但是,沒有附件!
這是報告命令按鈕背后的代碼:
Option Compare Database
Option Explicit
Private Sub cmdEmailPayslip_Click()
On Error GoTo cmdEmailPayslip_Error
Dim O As New Outlook.Application
Dim M As Outlook.MailItem
Dim Msg As String
Dim aTextBody As String
Dim myPath As String
Dim myFile As String
Dim mySubject As String
mySubject = Me.FirstName.Column(1) & " " & Me.LastName.Column(1) & _
" - Payslip for " & Format$(Forms!fSF!SFrom, "mmmm yyyy")
aTextBody = "Dear " & Me.FirstName.Column(1) & "," & _
Chr(10) & Chr(10) & "Please find attached your payslip for the month of " & _
Format$(Forms!fSF!SFrom, "mmmm yyyy") & _
Chr(10) & Chr(10) & "Best regards," & _
Chr(10) & Chr(10) & "CIVIC EA OPS Team!"
myPath = "C:\Payroll PESA\Payslips"
myFile = Format$(Date, "yyyymmdd") & " - " & Me.FirstName.Column(1) & " - Payslip for " & Format$(Forms!fSF!SFrom, "mmmm yyyy")
DoCmd.OutputTo acOutputReport, "rPayslips", acFormatPDF, myPath & "\" & myFile & ".pdf", False
Set O = New Outlook.Application
Set M = O.CreateItem(olMailItem)
On Error Resume Next
With M
.Body = aTextBody 'Set body text
.To = Me.REmail 'Set email address
'.Cc = "" 'Set email CC address
.Subject = mySubject 'Set subject
.Attachment.Add myPath & "\" & myFile
.Display
End With
Set M = Nothing
Set O = Nothing
'Show message
MsgBox "The email message has been sent successfully. ", vbInformation, "EMail message"
cmdEmailPayslip_Error:
Resume Next
End Sub
我嘗試了很多排列,但沒有用。
我究竟做錯了什么?
提前謝謝了。
也許我應該改變我的方法並嘗試通過記錄集創建個人 PDF 工資單(並將它們保存到指定的文件夾,每個 PDF 文件的正確名稱,然后創建一組單獨的電子郵件,每個電子郵件包含特定的工資單作為附件) - 但這超出了我的理解...
您將報告另存為
myPath & "\" & myFile & ".pdf"
但嘗試添加此附件:
myPath & "\" & myFile
如果您不在On Error Resume Next
之后運行此代碼(並且如果您的錯誤處理程序包含多個Resume Next
),它會向您顯示“無法打開文件”錯誤。
在所有像這樣的情況下,當您創建一個文件並稍后使用它時,最好將完整的文件路徑\名稱存儲在一個變量中,這樣就不會發生這樣的錯誤。
sFullPath = myPath & "\" & myFile & ".pdf"
DoCmd.OutputTo acOutputReport, "rPayslips", acFormatPDF, sFullPath, False
'...
.Attachment.Add sFullPath
PS 並在資源管理器中,關閉“隱藏已知文件類型的文件擴展名”設置。 這只會導致混亂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.