2017-04-04 93 views
1

私のコードで助けが必要です。私はPowerPointにさまざまなExcelファイルから写真として多くのテーブルをコピーするマクロを書きましたが、時には完全に動作し、ときどき表示されますエラー1004 - メソッドクラスのCopyPictureが失敗しました。ここに私のコードは次のとおりです。VBA - エラー1004 - メソッドクラスのCopyPictureが失敗しました

Sheets("List1").Select 
' group chart 
ActiveSheet.Outline.ShowLevels RowLevels:=0, ColumnLevels:=1 
' select cells to be copied to PowerPoint: 
Range("A1:X83").Select 
' copy cells: 
Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture 
' paste to PowerPoint: 

pptSld.Shapes.Paste.Select 

私は誰かがRange("A1:X83").SelectSheets("List1").を挿入有用であることがわかったが、それは助けにはなりませんでした。 私はOffice 2010を使用している仕事場でこの問題を抱えています。私は自宅でOffice 2016を持っており、コードは完全に機能しています。

あなたはアイデアを持っていますか、どのようにエラーなく動作させる方法はありますか?

答えて

1

.Selectをすべて使用する習慣を失います。これはマクロレコーダーコードの機能ですが、マクロレコーダーコードはすべての手動アクションを模倣するためです.Officeを自動化する場合、手動でタスクを実行するときにマウスクリックを再現する必要はありません。 Officeアプリケーションのオブジェクトモデル

</rant>

だからWorksheets("List1")をオフに作業し、画像としてspecitic Rangeをコピーします。

Application.Worksheets("List1").Range("A1:X83").CopyPicture xlScreen, xlPicture 

このコードは、はるかに堅牢Selectionに依存している何よりもです:あなたは.CopyPictureオフを呼んでいます特定のRangeオブジェクトです。

はそうするために残っているすべては、貼り付けることです。

pptSld.Shapes.Paste 

。なおPaste is a method that doesn't return anythingを、あなたが合法的に.Selectを行うことはできませんので、 - しかし、なぜあなたはとにかく.Selectそれをするのでしょう?

あなたは新しく作成されたShapeオブジェクトにアクセスする必要がある場合は、pptSld.Shapesコレクションから、それを取得することができます。その後、

Dim excelScreenshot As Shape 
Set excelScreenshot = pptSld.Shapes(pptSld.Shapes.Count) 

そして、あなたがそうSelectionと、あなたが今excelScreenshotで行うことができますしたいものは何でも - とボーナスとしてIntelliSenseと、すべてのメンバーに遅延バインドコールを呼び出させるObjectではなく、厳密に型指定されたオブジェクトリファレンスを使用するための自動補完機能があります。言い換えれば、パフォーマンスは向上しますそれは可能性があります。

+0

このような完全な回答をいただきありがとうございます。このコードは私のために働いていますが、スライド上にシェイプを揃えることができません。私はこのコードを使っている 'Dim excelScreenshot As Shape excelScreenshot = pptSld.Shapes(pptSld.Shapes.Count)を設定すると、excelScreenshot。Left = 25 excelScreenshot.Top = 100'と "Error 13 - Type mismatch"が表示されます – Pelmeshka

+0

@Pelmeshkaは、そのエラーの原因となっている命令が不明です。デバッガ(ブレークポイント/ F9、ステップスルー/ F8、ローカルツールウインドウなど)、オブジェクトブラウザ/ F2、Googleおよびスタックオーバーフローを使用して、問題の原因となっている命令を特定します。 * *失敗した場合、可能な限り小さなコードで問題を再現し([mcve]を参照)、新しい質問をしてください。 –

+0

ありがとう、それは今働いている! – Pelmeshka

0

参考文献を参照して、正しいライブラリを呼び出していることを確認してください。

ツール]> [参照

わからないその次のものが必要ですが、あなたは、Microsoft PowerPointがxx.xの何とか何とか何とかがチェックされていることを確認しますに。

+0

ええ、Microsoft Powerpointには – Pelmeshka

+0

というコメントが追加されています.IMOというのは、確かな答えではなくヒントです。 –

関連する問題