2017-04-04 494 views
1

我需要一些幫助,我的代碼。我寫了一個宏,它將許多表格複製爲不同Excel文件中的圖片到PowerPoint,但有時它完美地工作,並且有時出現錯誤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").Select之前插入Sheets("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做 - 和作爲獎勵,您可以獲得智能感知並使用強類型對象引用進行自動完成,而不是Object,這會使每個成員都調用遲到的呼叫 - 換句話說,您將獲得更好的性能,但無法察覺有可能。

+0

非常感謝你這樣一個完整的答案。此代碼適用於我,但現在我無法在幻燈片上對齊我的形狀。我正在使用此代碼'Dim excelScreenshot As Shape Set excelScreenshot = pptSld.Shapes(pptSld.Shapes.Count)excelScreenshot。左= 25 excelScreenshot.Top = 100',我得到「錯誤13 - 類型不匹配」 – Pelmeshka

+0

@ Pelmeshka不知道哪個指令導致該錯誤。確定哪個指令導致問題,使用調試器(斷點/ F9,step-through/F8,本地工具窗口等),對象瀏覽器/ F2和Google&Stack Overflow來確定您需要使用的實際類型。 *失敗*,用盡可能少的代碼重現問題(參見[mcve]),並提出一個新問題。 –

+0

非常感謝你,現在正在工作! – Pelmeshka

0

檢查您的參考資料以確保您正在調用正確的庫。

工具>參考

不知道這對你的需要,但要確保你有微軟Powerpoint XX.X等等等等等等檢查。

+0

是的,我在那裏微軟Powerpoint添加 – Pelmeshka

+0

更好地作爲評論,國際海事組織,因爲它更多的是一個小費,而不是一個堅實的答案。 –

相關問題