Copying Multiple Excel Charts To PowerPoint Using VBA - PowerPoint में एक्सेल चार्ट की Copy बनाना

 Copying Multiple Excel Charts To PowerPoint Using VBA - PowerPoint में एक्सेल चार्ट की Copy बनाना


ज्यादा समझने के ये वीडियो देखे



इस मॉड्यूल में, हम अपनी कार्यपुस्तिका में एकाधिक एक्सेल चार्ट लेने के तरीके के बारे में जानेंगे और इसे एक पावरपॉइंट प्रेजेंटेशन में कॉपी करेंगे जिसे हम बनाएंगे। इस मॉड्यूल को दो भागों में विभाजित किया जाएगा। सबसे पहले, हम मान लेंगे कि सभी चार्ट एक ही शीट पर हैं और फिर उन चार्ट को एक प्रेजेंटेशन में कॉपी करें। उसके बाद, हम मान लेंगे कि हमारे पास कई वर्कशीट में कई चार्ट हैं।

चरण एक: पावरपॉइंट ऑब्जेक्ट लाइब्रेरी को सक्षम करें

एक्सेल वीबीए में पावरपॉइंट ऑब्जेक्ट लाइब्रेरी को सक्षम करने के लिए, वीबीए संपादक गो-टू टूल्स के अंदर जाएं, एक ड्रॉप-डाउन दिखाई देगा जिस बिंदु पर आप संदर्भों पर जा सकते हैं। एक नई विंडो खुलेगी जहां आप विभिन्न संदर्भ पुस्तकालयों का चयन कर सकते हैं। आप Microsoft PowerPoint ऑब्जेक्ट लाइब्रेरी की तलाश में होंगे। ध्यान रखें, हो सकता है कि आपको अपनी PowerPoint ऑब्जेक्ट लाइब्रेरी में कोई भिन्न संख्या दिखाई दे। उदाहरण के लिए, मेरा माइक्रोसॉफ्ट पावरपॉइंट 16.0 ऑब्जेक्ट लाइब्रेरी है, ऐसा इसलिए है क्योंकि मैं ऑफिस के नवीनतम संस्करण पर हूं। इसका अर्थ यह है कि नंबर आपके पास Office के संस्करण को संदर्भित कर रहा है! हालाँकि, यदि आप पुराने संस्करण पर हैं तो आपको एक अलग संख्या दिखाई देगी। जो भी संख्या है बस पुस्तकालय को सक्षम करें।

इसके अलावा, क्योंकि मैंने अपने ऑब्जेक्ट एक्सप्लोरर के शीर्ष पर होने से पहले ऑब्जेक्ट लाइब्रेरी का उपयोग किया है। यदि आपने पहली बार इस पुस्तकालय का उपयोग किया है, तो आपको नीचे स्क्रॉल करना होगा और इसे खोजना होगा। हालांकि हमारे लिए अच्छा है, सभी आइटम वर्णानुक्रम में हैं।

चरण दो: अपने चर घोषित करें
पहली चीज जो हमें करने की ज़रूरत है वह है हमारे चर घोषित करना। उन्हें दो श्रेणियों में विभाजित किया जाएगा, PowerPoint चर और एक्सेल चर। हमें अपने पावरपॉइंट एप्लिकेशन को रखने के लिए एक चर की आवश्यकता है, हमें अपने आवेदन में एक प्रस्तुति की आवश्यकता है, इसलिए हमें एक प्रस्तुति चर बनाने की आवश्यकता है, और अंत में, हम अपनी प्रस्तुति में एक स्लाइड चाहते हैं ताकि हम एक स्लाइड ऑब्जेक्ट वैरिएबल बना सकें। अब मैं एक और वैरिएबल भी बनाने जा रहा हूं जो पावरपॉइंट से संबंधित है, और मैं इस वेरिएबल को स्लाइड इंडेक्स कहूंगा। यह तब काम आएगा जब मुझे अपने चार्ट के माध्यम से लूप करने और प्रत्येक चार्ट के लिए एक स्लाइड बनाने की आवश्यकता होगी, लेकिन मैं इसे बाद में समझाऊंगा।

अंत में, हमें अपने एक्सेल वैरिएबल को घोषित करने की आवश्यकता है, इस मामले में, हमारे पास केवल एक है जिसे हमें घोषित करना है कि कौन सा चार्ट ऑब्जेक्ट वेरिएबल है। उस वेरिएबल में हमारा चार्ट होगा जिसे हम एक्सपोर्ट करना चाहते हैं। यहां कोड का पहला खंड है जहां हम अपने चर घोषित करते हैं।

 Dim PPTApp As PowerPoint.Application
 Dim PPTPres As PowerPoint.Presentation
 Dim PPTSlide As PowerPoint.Slide
 Dim SldIndex As Integer


चरण तीन: PowerPoint का एक नया उदाहरण बनाएँ

एक बार जब हम अपने चर घोषित कर देते हैं तो हमें सबसे पहले जो करना होता है वह है कि हम अपने पावरपॉइंट एप्लिकेशन का एक उदाहरण बनाएं क्योंकि इस स्क्रिप्ट में यह माना जाता है कि पावरपॉइंट वर्तमान में सक्रिय नहीं है। PowerPoint का एक नया उदाहरण बनाने के लिए हम अपने PPTApp चर को PowerPoint अनुप्रयोग के एक नए उदाहरण के बराबर सेट करेंगे। हमारे द्वारा PowerPoint का एक नया उदाहरण बनाने के बाद हमारा PPTApp चर अब इस उदाहरण को रखेगा। यहां बताया गया है कि कोड कैसा दिखेगा:

 Set PPTApp = New PowerPoint.Application
     PPTApp.Visible = True

चरण चार: एक नई प्रस्तुति बनाएं

अब डिफ़ॉल्ट रूप से जब हम एक नया पावरपॉइंट एप्लिकेशन बनाते हैं तो उसके भीतर कोई प्रेजेंटेशन नहीं होगा। यह कुछ ऐसा है जो हमें वीबीए में करना है। एक नया प्रेजेंटेशन बनाने के लिए, हमें प्रेजेंटेशन कलेक्शन में जाना होगा जो हमारे PPTApp से संबंधित है और फिर हमारे प्रेजेंटेशन कलेक्शन के ऐड मेथड को कॉल करें। यहां वह कोड है जो एक नई प्रस्तुति बनाता है।


 Set PPTPres = PPTApp.Presentations.Add

चरण पांच: हमारे स्लाइड इंडेक्स हैंडलर की घोषणा करें
अब इस उदाहरण में, हम कई चार्ट को पावरपॉइंट पर कॉपी करना चाहते हैं और यह माना जाता है कि इनमें से प्रत्येक चार्ट एक अलग स्लाइड पर मौजूद होना चाहिए। इसे प्राप्त करने के लिए, मुझे एक वेरिएबल बनाने की आवश्यकता है जो गतिशील रूप से बदल जाएगा ताकि जब मैं चार्ट दो पर हूं तो इसका मूल्य दो होगा, जब मैं चार्ट तीन पर हूं तो इसका मान तीन होगा और इसलिए पर। मैं जो करने जा रहा हूं वह इस चर को बनाना है और इसमें एक का मान रखना है और बाद में कोड में, मैं चार्ट के माध्यम से लूप के रूप में इस मान को बदल दूंगा। इस बिंदु पर हालांकि यह ठीक है यदि इसका केवल एक का मान है। यहां बताया गया है कि मैं अपना स्लाइड इंडेक्स हैंडलर कैसे घोषित करता हूं।

 SldIndex = 1

चरण छह: सक्रिय शीट पर प्रत्येक चार्ट के माध्यम से लूप करें



अब हमारा लक्ष्य प्रत्येक चार्ट को अपनी सक्रिय शीट पर ले जाना और उन्हें PowerPoint में निर्यात करना है, इसलिए हमें अपनी शीट पर प्रत्येक चार्ट के माध्यम से जाने का एक तरीका चाहिए। अब हमारे लिए, हमारे पास एक संग्रह है जिसका हम लाभ उठा सकते हैं जिसमें किसी विशेष कार्यपत्रक पर सभी चार्ट शामिल हैं। इस संग्रह को चार्टऑब्जेक्ट संग्रह कहा जाता है और यदि हम इस संग्रह को लेते हैं और इसे प्रत्येक लूप के लिए रखते हैं तो अब हमारे पास प्रत्येक चार्ट को कॉपी करने का एक तरीका है। यहां बताया गया है कि हम अपना लूप कैसे बनाएंगे:

 For Each Chrt In ActiveSheet.ChartObjects
        
         'Copy the Chart
          Chrt.Copy


 Next Chrt



ध्यान रखें, यह सब हमारी शीट में प्रत्येक चार्ट के माध्यम से लूपिंग कर रहा है और इसे कॉपी कर रहा है। इस बिंदु पर, हमने यह निर्दिष्ट नहीं किया है कि इसे कहाँ चिपकाना है।


चरण छह: स्लाइड बनाएं

इस बिंदु पर हमारे पास अभी भी हमारी प्रस्तुति में कोई स्लाइड नहीं है, इसलिए हमें एक बनाने की आवश्यकता है। स्लाइड बनाने के लिए, हमें अपने PPTPres ऑब्जेक्ट में जाना होगा, फिर स्लाइड संग्रह में, और स्लाइड बनाने के लिए ऐड विधि को कॉल करना होगा। दो पैरामीटर हैं जिनसे हम गुजर सकते हैं। पहला स्लाइड इंडेक्स या प्रस्तुति में हमारी स्लाइड की स्थिति को निर्दिष्ट करता है।

यह वह जगह है जहां मैं उस स्लाइड इंडेक्स से गुजरने जा रहा हूं जिसे मैंने ऊपर घोषित किया है। अब क्योंकि मैंने मान को एक पर सेट किया है जब हम पहला लूप होंगे तो हम अपनी पहली स्लाइड बनाएंगे। अब हमें इस मान को बदलने का एक तरीका बनाना होगा क्योंकि हम अगले लूप में जाते हैं लेकिन वह नीचे है।

अगला पैरामीटर, PpSlideLayout, अगला पैरामीटर है जिसे हमें पास करने की आवश्यकता है। यह पैरामीटर एक स्थिरांक है जो स्लाइड के लेआउट को निर्दिष्ट करता है। इस मामले में, हम केवल एक खाली स्लाइड लेआउट चाहते हैं, इसलिए हम ppLayoutBlank से गुजरेंगे। यहाँ इस खंड के लिए कोड है:

For Each Chrt In ActiveSheet.ChartObjects
        
       'Copy the Chart
        Chrt.Copy
        
       'Create a new slide in the Presentation,and set the layout to blank
        Set PPTSlide = PPTPres.Slides.Add(SldIndex, ppLayoutBlank)


 Next Chrt

चरण आठ: चार्ट चिपकाएँ



चार्ट पेस्ट करने के लिए हम अपने PPTSlide ऑब्जेक्ट में, शेप्स कलेक्शन में जाएंगे और PasteSpecial Method को कॉल करेंगे या यदि आप चाहें तो आप अधिक सामान्य Paste मेथड को कॉल कर सकते हैं। इस उदाहरण में, मैं पेस्टस्पेशल विधि का उपयोग करता हूं लेकिन मैं एक नियमित पेस्ट करने वाला कोड प्रदान करूंगा। यदि हम पेस्ट विशेष विधि का उपयोग करते हैं तो हमें डेटाटाइप पैरामीटर से गुजरना होगा जो निर्दिष्ट करेगा कि हम इसे कैसे पेस्ट करना चाहते हैं। इस उदाहरण में, मैं इसे OLEObject के रूप में पेस्ट करता हूं जो मूल रूप से एक एम्बेडेड एक्सेल चार्ट है। अब क्योंकि मैंने एक OLEObject चुना है, मैं वास्तव में यह निर्दिष्ट कर सकता हूं कि क्या मैं इसे अपनी कार्यपुस्तिका से वापस लिंक करना चाहता हूं। मैंने इसे लिंक करना चुना। यहाँ कोड है:

For Each Chrt In ActiveSheet.ChartObjects
        
       'Copy the Chart
        Chrt.Copy
        
       'Create a new slide in the Presentation,and set the layout to blank
        Set PPTSlide = PPTPres.Slides.Add(SldIndex, ppLayoutBlank)


       'Paste as OLEObject and it is linked.
        PPTSlide.Shapes.PasteSpecial DataType:=ppPasteOLEObject, Link:=msoTrue
       'PPTSlide.Shapes.Paste MORE GENERAL PASTE METHOD


 Next Chrt


चरण नौ: हमारे स्लाइड इंडेक्स हैंडलर को बढ़ाएं


अब आयात भाग आता है, याद रखें कि हम कैसे चाहते हैं कि हमारा दूसरा चार्ट दूसरी स्लाइड पर जाए, तीसरा चार्ट तीसरी स्लाइड पर और इसी तरह? ऐसा करने के लिए हमें अपने कोड में अपने स्लाइड इंडेक्स हैंडलर को बढ़ाना होगा। हमें ऐसा क्यों करना है? ठीक है, जब हम इसे बढ़ाते हैं, तो हम मूल रूप से प्रत्येक लूप पर इसका मूल्य एक-एक करके बढ़ा रहे होते हैं, इसलिए जब हम अपनी नई स्लाइड बनाने के लिए अपने स्लाइड इंडेक्स हैंडलर से गुजरते हैं तो यह सही मान होता है। सही मान से मेरा मतलब है कि यह हमारी प्रस्तुति में सही स्थिति में एक नई स्लाइड जोड़ देगा। यहां बताया गया है कि हम अपने स्लाइड इंडेक्स हैंडलर को कैसे बढ़ाते हैं:

For Each Chrt In ActiveSheet.ChartObjects
        
       'Copy the Chart
        Chrt.Copy
        
       'Create a new slide in the Presentation,and set the layout to blank
        Set PPTSlide = PPTPres.Slides.Add(SldIndex, ppLayoutBlank)


       'Paste as OLEObject and it is linked.
        PPTSlide.Shapes.PasteSpecial DataType:=ppPasteOLEObject, Link:=msoTrue
       'PPTSlide.Shapes.Paste MORE GENERAL PASTE METHOD


       'Increment index so that we paste the next chart on the new slide that is added.
        SldIndex = SldIndex + 1


 Next Chrt


Sub ppt()

Dim pptapp As PowerPoint.Application
 Dim pptpres As PowerPoint.Presentation
 Dim pptslide As PowerPoint.Slide
 Dim SldIndex As Integer
 
 Set pptapp = New PowerPoint.Application
     pptapp.Visible = True
     
      Set pptpres = pptapp.Presentations.Add
      
       SldIndex = 1
       
        For Each Chrt In ActiveSheet.ChartObjects
        
          Chrt.Copy

Set pptslide = pptpres.Slides.Add(SldIndex, ppLayoutBlank)
 pptslide.Shapes.Paste
 SldIndex = SldIndex + 1
    



 Next Chrt
 
 
     
End Sub








Download Mobile App



Comments

Popular posts from this blog

MS Excel Lookup and reference functions (reference)

Referencing a Workbook using VBA