2016-04-18 31 views
0

現在、vptを使用してpptレポートの作成を自動化しています。私はExcelのチャートをコピーしてpptに貼り付ける必要があります。私は正常にExecuteMso "PasteExcelChartSourceFormatting"を使用して、ソースコードの書式設定とブックの埋め込みの間に貼り付けることができるように、グラフを貼り付けることができましたが、コードの位置を変えようとすると、 ppt。 コードを参照してください:オブジェクトのexcelからpptにグラフを投稿した後に実行時エラーが発生しました

Sub Update() 

    Dim ppApp As PowerPoint.Application 
    Dim ppPres As PowerPoint.Presentation 
    Dim ppSlide As PowerPoint.Slide 


    Set ppApp = New PowerPoint.Application 

    ppApp.Visible = True 
    ppApp.Activate 

    Set ppPres = ppApp.Presentations.Open("C:\Users\ashah\Documents\Advisory.pptx") 

    ppPres.Slides(1).Shapes(7).Delete 
    Sheet1.ChartObjects("Chart 24").Chart.ChartArea.Copy 
    ppPres.Slides(1).Select 
    DoEvents 

    ppApp.CommandBars.ExecuteMso "PasteExcelChartSourceFormatting" 
    ppApp.CommandBars.ReleaseFocus 
    DoEvents 

    ppPres.Slides(1).Shapes(7).Left = _ 
     (ppPres.PageSetup.SlideWidth/2) - (ppPres.Slides(1).Shapes(7).Width/2) 
    ppPres.Slides(1).Shapes(7).Top = 77 

End Sub 

私は実行時エラーを取得する「--2147188160(80048240)」、メソッド「アイテム」「シェイプ」は失敗しました。デバッグは私のコードの最後の数行をハイライト表示します。

アドバイスをいただければ幸いです!

+0

'Shape(7)'は存在しますか? – Tom

+0

ppPres.Slides.Shapes.Pasteのような標準的なペーストコードを使用した場合、ポジションコードが機能すると思います。それはちょうどexecuteMsoで動作していない – chandu

+0

私はコードの最後の2行をShape(1)または任意のFigureに変更しても、それは動作しません。これらの形はパワーポイントに存在します! – chandu

答えて

0

あなたは、わずかに異なる方法でこれを試すことができます

Sub Update() 
    Dim ppApp As PowerPoint.Application 
    Dim ppPres As PowerPoint.Presentation 
    Dim ppSlide As PowerPoint.Slide 

    Set ppApp = New PowerPoint.Application 

    ppApp.Visible = True 
    ppApp.Activate 

    Set ppPres = ppApp.Presentations.Open("C:\Users\ashah\Documents\Advisory.pptx") 
    Set ppSlide = ppPres.Slides(1) 
    ppSlide.Shapes(7).Delete 

    Sheet1.ChartObjects(1).Chart.ChartArea.Copy 

    ppSlide.Shapes.Paste.Select 

    With ppPres.Windows(1).Selection.ShapeRange 
     .Left = (ppPres.PageSetup.SlideWidth/2) - (.Width/2) 
     .Top = 77 
    End With 

End Sub 

UPDATE: 私は2隻の潜水艦にこれを分割します。あなたは、これはあなたがより多くの状況では、それを使用可能にするために架空の場合は、CopyAndPasteChartサブもう少しを編集でき

Sub Update() 
    Dim ppApp As PowerPoint.Application 
    Dim ppPres As PowerPoint.Presentation 
    Dim ppSlide As PowerPoint.Slide 

    Set ppApp = New PowerPoint.Application 

    ppApp.Visible = True 
    ppApp.Activate 

    Set ppPres = ppApp.presentations.Open("C:\Users\ashah\Documents\Advisory.pptx") 
    Set ppSlide = ppPres.Slides(1) 
    ppSlide.Shapes(7).Delete 

    Call CopyAndPasteChart(ppApp, ppSlide) 

    With ppSlide.Shapes(ppSlide.Shapes.Count) 
     .Left = (ppPres.PageSetup.SlideWidth/2) - (.Width/2) 
     .Top = -77 
    End With 
    ppApp.CommandBars.ReleaseFocus 

End Sub 

Sub CopyAndPasteChart(ppApp As PowerPoint.Application, ppSlide As PowerPoint.Slide) 
    Sheet1.ChartObjects(1).Chart.ChartArea.Copy 
    ppApp.CommandBars.ExecuteMso ("PasteExcelChartSourceFormatting") 
End Sub 

を試してみることができます。

+0

これはある程度機能していますが、私が言ったように、executeMso "PasteExcelChartSourceFormatting"を使用してペースト・スペシャルのアクションを複製し、ソース・フォーマットを維持し、ワークブックを埋め込む必要があります – chandu

+0

executeMsoを使用した後、そのチャートは、後続のコードでマクロに遭遇するエラーを発生させるようです。これが共通の問題かどうかは分かりません。 – chandu

+0

私はちょうどそれも見つけました。これは、サブが完了するまでexecuteMsoが完了しないようです。したがって、サブの最後の部分は正しく実行できません。これをExcelからルーチンを使って更新している場合は、チャートオブジェクトではなく画像として貼り付けることができますか? – Tom

関連する問題