2010-02-19 5 views
5

मैं अपनी एक्सेस 2007 रिपोर्ट में कार्यक्षमता जोड़ना चाहता हूं जिससे एक बटन के क्लिक पर रिपोर्ट की पीडीएफ प्रति बनाई गई हो। मैं जानता हूँ कि एक OutputTo मैक्रो जो मेरे लिए यह कर सकते हैं है कि वहाँ है, लेकिन यह मुझे रिपोर्ट फ़ील्ड मान पीडीएफ के फ़ाइल नाम का हिस्सा है, अर्थात् के रूप में शामिल करने के लिए अनुमति नहीं देता:मैं पीडीएफ प्रारूप में एक रिपोर्ट कैसे आउटपुट कर सकता हूं, जहां नाम फ़ील्ड से मूल्यों का होता है?

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

मैंने देखा इस MSDN thread और इस किया है SO 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':

माइक्रोसॉफ्ट ऑफिस तक नहीं पहुँच सकता फ़ील्ड '|' ढूंढें आपकी अभिव्यक्ति में संदर्भित

वहां कोई विचार है?

+0

यह 'फ़ील्ड नहीं ढूंढ सकता' त्रुटि आमतौर पर पुस्तकालयों में कहीं कुछ होने पर त्रुटि प्रकट होती है: संस्करण समस्या, अपरिचित पैरामीटर, आदि। मुझे लगता है कि @ जेओएनएच सही है: आप वीबीए के बाहर कुछ खो रहे हैं पीडीएफ रिपोर्ट मुद्रित। –

+0

@ फिलिप: मैक्रो ठीक काम करता है, यह मुद्दा फ़ील्ड को पहचानने के लिए वीबीए प्राप्त करने के साथ है। – Zaid

+0

इस मामले में तत्काल विंडो में कुछ 'debug.print' आज़माएं और अपनी फ़ाइल नाम के पैरामीटर में से प्रत्येक को जांचें कि यह कौन सा दोषपूर्ण है: ? debug.print [क्लाइंट संगठन] कोड ? debug.print ग्राहक। कोड आदि –

उत्तर

12

मैं इसे (अंततः) काम करने के लिए मिला है।

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. रिपोर्ट की जरूरत है मुद्रण से पहले खोले जाने के लिए

    निम्नलिखित sub चाल किया था।

  2. उसी नाम से फ़ील्ड का संदर्भ लें जो रिपोर्ट इसे देखती है। रिपोर्ट में [Client Organisations].Code[Client Organisations_Code] था।
+0

[क्लाइंट संगठन] सबफ़ॉर्म नियंत्रण के रूप में है? यदि ऐसा है, तो सबफॉर्म नियंत्रण में एम्बेड किए गए फॉर्म में नियंत्रण या फ़ील्ड को संदर्भित करने के लिए सामान्य वाक्यविन्यास मुझे है! [क्लाइंट संगठन]। फार्म! कोड। यदि आप निर्दिष्ट करते हैं कि [क्लाइंट संगठन] एक सबफ़ॉर्म था, तो आपको जवाब देने के लिए यह बहुत आसान होता। यदि ऐसा नहीं है, तो मुझे समझ में नहीं आता कि आपका समाधान क्यों काम करता है। –

+1

@ डेविड: यह नहीं है। '[क्लाइंट संगठन] कोड 'एक ऐसा क्षेत्र था जिसे रिपोर्ट' SELECT' क्वेरी 'के कारण' [क्लाइंट ऑर्गनाइजेशन_Code]' के रूप में देखा गया था, रिपोर्ट पर आधारित है: 'चयन [क्लाइंट संगठन]। कोड [क्लाइंट ऑर्गनाइजेशन_Code] के रूप में। ..'। – Zaid

+0

आपको अपने रिकॉर्ड स्रोतों में उस तरह की चीज़ से बचना चाहिए। में कहना चाहूंगा। यही है, एकाधिक तालिकाओं से एक ही फ़ील्ड नाम होने पर SQL कथन में एक त्रुटि है, या तो क्योंकि यह अनावश्यक है (यह दो तालिकाओं से संबंधित एक पीके/एफके है) या क्योंकि यह एक डिज़ाइन त्रुटि है (फ़ील्ड जो एक ही डेटा को स्टोर नहीं करते हैं एकाधिक तालिकाओं में एक ही नाम नहीं दिया जाना चाहिए)। साथ ही, तालिका/फ़ील्ड नामों में रिक्त स्थान डालना अव्यवस्थित है। रिक्त स्थान के बिना ऊंट का मामला उतना ही पठनीय और काम करने में काफी आसान है। –

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

@ जोनएच: मैंने प्रासंगिक परिवर्तन किए हैं, बटन पर क्लिक करने से कुछ भी नहीं है। कोई त्रुटि नहीं, कुछ भी नहीं। – Zaid

+0

आपने डीबग किया है कि strReportName क्या प्रदर्शित करता है? पीडीएफ को मुद्रित करने के लिए आपको पीडीएफ डिस्टिलर/प्रिंटर की भी आवश्यकता नहीं है। आप DoCmd.Output की उम्मीद नहीं कर सकते हैं वास्तव में एक लेखक के बिना पीडीएफ बनाने के लिए क्या आप? – JonH

+0

Office 2007 में पीडीएफ पीढ़ी करने के लिए एक डाउनलोड करने योग्य ऐड-इन है। यह काम करने के लिए acFormatPDF पैरामीटर के लिए आवश्यक है। यही है, उस ऐड-इन इंस्टॉल किए बिना एक्सेस 2007 को DoCmd.OutputTo कमांड के माध्यम से पीडीएफ में आउटपुट करने में सक्षम नहीं होगा। –

संबंधित मुद्दे