2010-02-19 27 views
5

Tôi muốn thêm chức năng vào báo cáo Access 2007 theo đó một bản sao của báo cáo PDF được tạo ra chỉ bằng một lần bấm nút. Tôi biết rằng có một OutputTo vĩ mô mà có thể làm điều này cho tôi, nhưng nó không cho phép tôi để bao gồm các giá trị trường báo cáo như một phần của tên tập tin của PDF, cụ thể là:Làm cách nào để xuất báo cáo ở định dạng PDF, trong đó tên bao gồm các giá trị từ các trường?

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

Trong khi tôi đã thấy điều này MSDN thread và điều này SO question, tôi không thấy việc sử dụng các giá trị trường trong bất kỳ câu trả lời nào.

Tôi nghĩ mã VBA là con đường để đi, vì vậy tôi (không thành công) thử như sau:

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

Run-time error '2465':

Microsoft Office Access không thể tìm trường '|' được gọi trong biểu thức của bạn

Có ý tưởng nào không?

+0

lỗi 'không thể tìm thấy trường' này thường xuất hiện khi có gì đó ở đâu đó trong thư viện: vấn đề phiên bản, thông số không được công nhận, v.v. Tôi đoán @jonH là đúng: bạn đang thiếu thứ gì đó bên ngoài VBA để có Báo cáo PDF được in. –

+0

@Philippe: Macro hoạt động tốt, vấn đề là với việc VBA nhận ra các trường. – Zaid

+0

trong trường hợp này hãy thử một vài 'debug.print' trong cửa sổ ngay lập tức và kiểm tra từng thông số của tên tệp của bạn để tìm lỗi nào trong số đó: ? debug.print [Tổ chức Khách hàng] .Code ? debug.print Clients.Code etc –

Trả lời

12

tôi đã nhận nó để làm việc (cuối cùng).

Sau đây sub đã làm các trick:

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 

Hai hãy cẩn thận:

  1. Báo cáo cần phải được mở trước khi in.
  2. Tham khảo các trường theo cùng tên mà báo cáo sẽ nhìn thấy. Điều đó [Client Organisations].Code[Client Organisations_Code] trong báo cáo.
+0

[Tổ chức khách hàng] có phải là kiểm soát biểu mẫu con không? Nếu vậy, cú pháp thông thường để tham chiếu đến một điều khiển hoặc trường trong biểu mẫu được nhúng trong điều khiển biểu mẫu con là Me! [Tổ chức khách hàng] .Form! Mã. Sẽ dễ dàng hơn nếu bạn cung cấp cho bạn câu trả lời nếu bạn đã chỉ định rằng [Tổ chức khách hàng] là một biểu mẫu con. Nếu không, thì tôi không hiểu tại sao giải pháp của bạn lại hoạt động. –

+1

@David: Không phải. '[Tổ chức khách hàng] .Code' là trường mà báo cáo được xem là' [Client Organisations_Code] 'vì truy vấn' SELECT' mà báo cáo dựa trên: 'SELECT [Tổ chức khách hàng] .Code AS [Client Organisations_Code]. ..'. – Zaid

+0

Bạn nên tránh loại điều đó trong tài nguyên hồ sơ của mình. Tôi sẽ nói. Tức là, có cùng tên trường từ nhiều bảng là một lỗi trong câu lệnh SQL, vì nó thừa (nó là PK/FK liên quan đến hai bảng) hoặc vì đó là lỗi thiết kế (các trường không lưu trữ cùng một dữ liệu nên không được đặt cùng tên trong nhiều bảng). Ngoài ra, việc đặt dấu cách trong các tên bảng/trường là không thể thực hiện được. Trường hợp Camel không có dấu cách cũng dễ đọc và khá dễ làm việc hơn một chút. –

1

Dễ dàng hơn để Dim chuỗi và đặt toàn bộ biểu thức của bạn ở đó và sau đó gỡ lỗi nó để xem liệu nó có chứa tên báo cáo hợp lệ hay không.

Như thế này:

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: Tôi đã thực hiện các thay đổi có liên quan, việc nhấp vào nút không có gì. Không có lỗi, không có gì. – Zaid

+0

Bạn đã gỡ lỗi những gì strReportName sẽ hiển thị? Ngoài ra, bạn không cần một máy in/máy in pdf để in ra PDF. Bạn không thể mong đợi DoCmd.OutputTo để thực sự tạo ra một pdf mà không có một nhà văn làm bạn? – JonH

+0

Có một phần bổ trợ có thể tải xuống để tạo PDF trong Office 2007. Cần có tham số acFormatPDF hoạt động. Đó là, Access 2007 mà không có bổ trợ được cài đặt sẽ không thể xuất ra PDF thông qua lệnh DoCmd.OutputTo. –

Các vấn đề liên quan