7

मुझे प्रेजेंटेशन (या तो ओपनऑफिस या पावरपॉइंट) के निर्माण को स्वचालित करने की आवश्यकता है। प्रस्तुति को किसी दिए गए निर्देशिका में प्रत्येक प्रस्तुतियों की पहली दो स्लाइड लेनी चाहिए, और फिर उन्हें एक प्रस्तुति में जोड़ना चाहिए। मैं उलझन में हूं कि इसे हल करने के लिए मुझे क्या दृष्टिकोण लेना चाहिए। किसी भी पॉइंटर्स की सराहना की जाएगी। , कुछ की तरहप्रोग्राम्सेटिक रूप से एक प्रस्तुति में कई प्रस्तुतियों से स्लाइड्स को गठबंधन करें

Sub Pull() 
Dim SrcDir As String, SrcFile As String 

    SrcDir = PickDir() 
    If SrcDir = "" Then Exit Sub 

    SrcFile = Dir(SrcDir & "\*.ppt") 

    Do While SrcFile <> "" 
     ImportFromPPT SrcDir + "\" + SrcFile, 1, 2 
     SrcFile = Dir() 
    Loop 

End Sub 

अपने स्रोत निर्देशिका चयन करने से आप अब इस समारोह

Private Function PickDir() As String 
Dim FD As FileDialog 

    PickDir = "" 

    Set FD = Application.FileDialog(msoFileDialogFolderPicker) 
    With FD 
     .Title = "Pick a directory to work on" 
     .AllowMultiSelect = False 
     .Show 
     If .SelectedItems.Count <> 0 Then 
      PickDir = .SelectedItems(1) 
     End If 
    End With 

End Function 

उपयोग कर सकते हैं

उत्तर

12

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

अपने पीपीटी के उनके आकाओं के लिए चिपके रहे हैं, तो आप सुरक्षित रूप से के बीच ">>>>" सभी कोड

Private Sub ImportFromPPT(FileName As String, SlideFrom As Long, SlideTo As Long) 
Dim SrcPPT As Presentation, SrcSld As Slide, Idx As Long, SldCnt As Long 

    Set SrcPPT = Presentations.Open(FileName, , , msoFalse) 
    SldCnt = SrcPPT.Slides.Count 

    If SlideFrom > SldCnt Then Exit Sub 
    If SlideTo > SldCnt Then SlideTo = SldCnt 

    For Idx = SlideFrom To SlideTo Step 1 
     Set SrcSld = SrcPPT.Slides(Idx) 
     SrcSld.Copy 
     With ActivePresentation.Slides.Paste 
      .Design = SrcSld.Design 
      .ColorScheme = SrcSld.ColorScheme 
      ' if slide is not following its master (design, color scheme) 
      ' we must collect all bits & pieces from the slide itself 

      ' >>>>>>>>>>>>>>>>>>>> 

      If SrcSld.FollowMasterBackground = False Then 
       .FollowMasterBackground = False 
       .Background.Fill.Visible = SrcSld.Background.Fill.Visible 
       .Background.Fill.ForeColor = SrcSld.Background.Fill.ForeColor 
       .Background.Fill.BackColor = SrcSld.Background.Fill.BackColor 

       ' inspect the FillType object 
       Select Case SrcSld.Background.Fill.Type 
        Case Is = msoFillTextured 
         Select Case SrcSld.Background.Fill.TextureType 
         Case Is = msoTexturePreset 
          .Background.Fill.PresetTextured (SrcSld.Background.Fill.PresetTexture) 
         Case Is = msoTextureUserDefined 
         ' TextureName gives a filename w/o path 
         ' not implemented, see picture handling 
         End Select 

        Case Is = msoFillSolid 
         .Background.Fill.Transparency = 0# 
         .Background.Fill.Solid 

        Case Is = msoFillPicture 
         ' picture cannot be copied directly, need to export and re-import slide image 
         If SrcSld.Shapes.Count > 0 Then SrcSld.Shapes.Range.Visible = False 
         bMasterShapes = SrcSld.DisplayMasterShapes 
         SrcSld.DisplayMasterShapes = False 
         SrcSld.Export SrcPPT.Path & SrcSld.SlideID & ".png", "PNG" 

         .Background.Fill.UserPicture SrcPPT.Path & SrcSld.SlideID & ".png" 
         Kill (SrcPPT.Path & SrcSld.SlideID & ".png") 

         SrcSld.DisplayMasterShapes = bMasterShapes 
         If SrcSld.Shapes.Count > 0 Then SrcSld.Shapes.Range.Visible = True 

        Case Is = msoFillPatterned 
         .Background.Fill.Patterned (SrcSld.Background.Fill.Pattern) 

        Case Is = msoFillGradient 

         ' inspect gradient type 
         Select Case SrcSld.Background.Fill.GradientColorType 
         Case Is = msoGradientTwoColors 
          .Background.Fill.TwoColorGradient 
           SrcSld.Background.Fill.GradientStyle , _ 
           SrcSld.Background.Fill.GradientVariant 
         Case Is = msoGradientPresetColors 
          .Background.Fill.PresetGradient _ 
           SrcSld.Background.Fill.GradientStyle, _ 
           SrcSld.Background.Fill.GradientVariant, _ 
           SrcSld.Background.Fill.PresetGradientType 
         Case Is = msoGradientOneColor 
          .Background.Fill.OneColorGradient _ 
           SrcSld.Background.Fill.GradientStyle, _ 
           SrcSld.Background.Fill.GradientVariant, _ 
           SrcSld.Background.Fill.GradientDegree 
         End Select 

        Case Is = msoFillBackground 
         ' Only shapes - we shouldn't come here 
       End Select 
      End If 

      ' >>>>>>>>>>>>>>>>>>>> 

     End With 
    Next Idx 

End Sub 

कोड केवल पढ़ने के लिए या पासवर्ड से सुरक्षित fies की जांच नहीं करता छोड़ सकते हैं और इच्छा उन पर दुर्घटनाग्रस्त कलेक्टर फ़ाइल पर खुद को चलाने के लिए भी सावधान रहें। अन्यथा यह काम करना चाहिए। मुझे स्वीकार करना होगा कि मैंने लंबे समय तक कोड की समीक्षा नहीं की है ;-)

+1

धन्यवाद! मुझे इसी की तो तलाश थी। मुझे केवल पुल विधि के लूप में मामूली परिवर्तन करना पड़ा: 'ImportFromPPT SrcDir +" \ "+ SrcFile, 1, 2' ' SrcFile = Dir' – thunderboltz

+0

आह सही ... मैं थ्रेड को अपडेट करना भूल गया। .. माफ़ कीजिये; जैसा कि आप देखते हैं कि यहां थोड़ी सी अमूर्तता है, अगर अगली बार आपको स्लाइड 5-7 खींचने की ज़रूरत है तो आप इसका पुन: उपयोग कर सकते हैं ;-) – MikeD

+0

@thunderboltz यह परिवर्तन मेरे लिए भी आवश्यक था, धन्यवाद! –

0

आप कई पतों में शामिल होने के लिए एक उपयोगी टूल खोजने के लिए "पावरपॉइंट जॉइन" पर जा सकते हैं।

0

मुझे खुशी है @miked आपको जो चाहिए वह आपको प्राप्त करने में सक्षम था।

एनईटी का उपयोग करने पर विचार करने के लिए एक अन्य विधि पर चर्चा की गई है, this post

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