2010-02-19 14 views
5

我想添加功能到我的Access 2007報表中,點擊一個按鈕創建報表的PDF副本。我知道有一個OutputTo宏能爲我做到這一點,但它不會讓我包括爲PDF格式的文件名的一部分,即報表字段的值:如何以PDF格式輸出報告,其中名稱由字段值組成?

[Client Organisations].Code + "-" + Clients.Code + "-" + Invoices_Code + "-" + Format([Invoice Date],"yyyy") + ".pdf" 

雖然我已經看到了這MSDN threadSO question,我沒有看到在任何答案中使用字段值。

我想VBA代碼是要走的路,所以我(失敗)嘗試了以下內容:

Private Sub Create_PDF_Click() 
DoCmd.OutputTo acOutputReport, , acFormatPDF, "" + [Client Organisations].Code 
+ "-" + Clients.Code + "-" + Invoices_Code + "-" + Format([Invoice Date],"yyyy") 
+ ".pdf", True 
End Sub 

運行時錯誤 '2465':

的Microsoft Office Access不能找到字段'|'提到你的表情

有沒有想法呢?

+0

這個'找不到字段'的錯誤通常出現在庫中的某處某處出現問題時:版本問題,無法識別的參數等。我猜@jonH是對的:你錯過了VBA之外的東西讓你PDF報告打印。 – 2010-02-19 15:54:29

+0

@Philippe:宏能正常工作,問題是讓VBA識別字段。 – Zaid 2010-02-20 08:46:50

+0

在這種情況下,請在立即窗口中嘗試幾個'debug.print',並測試您的文件名的每個參數以找出哪一個有問題: ? debug.print [Client Organizations]。代碼 ? debug.print Clients.Code etc – 2010-02-20 08:52:19

回答

12

我得到它的工作(最終)。

以下sub的伎倆:

Private Sub Create_PDF_Click() 

Dim myPath As String 
Dim strReportName As String 

DoCmd.OpenReport "Invoices", acViewPreview 

myPath = "C:\Documents and Settings\" 
strReportName = Report_Invoices.[Client Organisations_Code] + "-" + 
Report_Invoices.Clients_Code + "-" + Report_Invoices.Invoices_Code + "-" + 
Format(Report_Invoices.[Invoice Date], "yyyy") + ".pdf" 

DoCmd.OutputTo acOutputReport, "", acFormatPDF, myPath + strReportName, True 
DoCmd.Close acReport, "Invoices" 

End Sub 

兩個注意事項:

  1. 報告需要在打印之前打開。
  2. 請參閱報告將其視爲相同名稱的字段。那​​在報告中是[Client Organisations_Code]
+0

[客戶組織]是否是子窗體控件?如果是這樣的話,嵌入在子窗體控件中的表單中引用控件或字段的通常語法是Me![Client Organizations] .Form!Code。如果您指定[客戶組織]是一個子表單,那麼向您提供答案會容易得多。如果不是,那麼我不明白你的解決方案爲什麼起作用。 – 2010-02-21 05:56:41

+1

@David:不是的。 '[Client Organizations] .Code'是報告看作'[Client Organisations_Code]'的一個字段,因爲報告基於SELECT'查詢:'SELECT [Client Organizations] .Code AS [Client Organisations_Code]。 ..'。 – Zaid 2010-02-21 06:24:30

+0

你應該避免在你的記錄源中的那種東西。我會說。也就是說,在多個表中使用相同的字段名稱是SQL語句中的錯誤,或者是因爲它是多餘的(這是與兩個表關聯的PK/FK),或者因爲它是設計錯誤(不存儲相同數據的字段應該不能在多個表中給出相同的名稱)。另外,在表格/字段名稱中放置空格是不可取的。沒有空格的駱駝案例一樣可讀,並且相當容易處理。 – 2010-02-22 00:31:59

1

它更容易昏暗的字符串,並把你的整個表達式,然後調試它,看看它是否包含有效的報告名稱。

像這樣:

Dim strReportName as String 

strReportName = [Client Organisations].Code 
+ "-" + Clients.Code + "-" + Invoices_Code + "-" + Format([Invoice Date],"yyyy") 
+ ".pdf" 

//then try to print strReportName before you use DoCmd.OutputTo. 
+0

@JonH:我做了相關的修改,點擊按鈕什麼也不做。沒有錯誤,沒有。 – Zaid 2010-02-19 15:24:18

+0

你確實調試過strReportName顯示的內容嗎?也不需要一個PDF蒸餾器/打印機打印到PDF。你不能指望DoCmd.OutputTo真正創建一個沒有作家的pdf嗎? – JonH 2010-02-19 15:25:32

+0

在Office 2007中有一個可下載的加載項用於執行PDF生成。acFormatPDF參數是必需的。也就是說,沒有安裝該加載項的Access 2007將無法通過DoCmd.OutputTo命令輸出爲PDF。 – 2010-02-19 20:21:54