2016-08-16 20 views
1

指定されたグラフを指定されたPowerPointプレゼンテーションにコピーするために、下のSubを呼び出そうとしています。ただし、このSubを呼び出すマクロを実行すると、次のエラーが返されます。「オブジェクトがこのプロパティまたはメソッドをサポートしていません」奇妙なのは、シェイプとスライドの両方に呼び出されるメソッドが含まれていることです。同様に、エラーが呼び出される前にビットマップがクリップボードに正しくコピーされてがスライドに貼り付けられます。下にSub()があります。ExcelからPowerPointにグラフをコピーするスクリプトでエラーが発生しました

Sub copyChart(chrt As Chart, pres As PowerPoint.Presentation) 
    Dim curSlide As Slide, dummySlide As Slide 
    Set dummySlide= pres.Slides(2) 'Second slide is dummy slide. 
    Set curSlide = dummySlide.Duplicate(1) 'Duplicate dummy, set as current slide. 
    chrt.CopyPicture Appearance:=xlScreen, Format:=xlBitmap 'Copy the chart as a picture. 
    curSlide.Shapes.Paste '<-----------Error here. 
End Sub 

同様に、私は私のスクリプト全体の.txtファイルを提供するために期待していたが、(ここで貼り付けるには少し長いです)方法がわからないでした。ご協力いただきありがとうございます。

(さらに私を混乱させ、この実装はPaste Excel Chart into Powerpoint using VBAのものと非常に似ていることに注意してください。)

+0

下記の私の答えを見てください –

答えて

1

私は、Officeの最近のバージョンでは多くの問題がありました。 2003年以前にはこの問題はなかったが、2007年と2010年にはそれがあったが、2013年と2016年にはそれがスペードであった。

コードをステップ実行するとうまく動作しますが、フルスピードで実行すると、ペーストにエラーが発生します。

コピーが終了する時間がないように、クリップボードに貼り付けるときにクリップボードには何も貼り付けられていません。

時には、このことができます:

chrt.CopyPicture Appearance:=xlScreen, Format:=xlBitmap 
DoEvents 
curSlide.Shapes.Paste 

DoEventsは、バックグラウンド処理は、最後の仕上げをする機会を持っている間待つようにVBAを伝えます。

2

エラーはVBAが異なる参照間で変数をどのように処理するかに起因することができますように見えます。 (特に、どのようにPPT VBAがそれらを処理するのか)私は積極的にチャートを選択/コピーすることによってマクロを動作させることができました。変数がなぜ問題を引き起こすのかを知るためにもう少し研究をする必要がありますが、少なくとも私はどのように問題に取り組んでいるのか知っています。

Sub copyChart(curSlide As Slide) 
    Dim chr as ChartObject 
    Set chr = Sheets("CHARTSHEET").ChartObjects(1) 
    Sheets("CHARTSHEET").Select 
    ActiveChart.CopyPicture 
    curSlide.Shapes.PasteSpecial 
End Sub 
1

は、私はその後、Objectを定義貼り付けチャートに設定したい、別の方法を使用したいです。その後、PowerPoint内で(Excelから)貼り付けられたChartオブジェクトのパラメータを変更する方が簡単です。

、以下を参照してくださいコード:コード行で

Sub copyChart(curSlide As Slide) 

Dim chr    As ChartObject 
Dim myChart   As Object 

Set chr = Sheets("CHARTSHEET").ChartObjects(1) 
chr.Copy 

' setting myChart object to the pasted chart (let's me later an easy way to modify it's parameters) 
Set myChart = curSlide.Shapes.PasteSpecial(ppPasteBitmap, msoFalse) ' can change first parameter to other avaialabe formats : ppPasteGIF, ppPasteEnhancedMetafile, ppPasteOLEObject, etc. 

' set different parameters for the pasted chart in PowerPoint slide 
With myChart 
    .Left = 200 
    .Top = 200 
End With 

End Sub 

Set myChart = curSlide.Shapes.PasteSpecial(ppPasteBitmap, msoFalse) 

あなたはカッコ内の最初のパラメータを変更することができます。ppPasteBitmap他の多くのavaialbleフォーマットには、(それらをテストし、どちらが最良の結果をもたらすかをご覧ください)ppPasteGIF,ppPasteEnhancedMetafileppPasteOLEObjectなど

関連する問題