簡體   English   中英

從Excel粘貼/復制形狀到PowerPoint VBA的代碼錯誤

[英]Error in Code to Paste / Copy Shapes from Excel to PowerPoint VBA

我在VBA中創建了一個代碼,用於將形狀從Excel中的工作表復制到現有的PowerPoint文件中,並將這些形狀添加到現有幻燈片中。 在Excel中,我有一個表格,指示將每種形狀放置在哪個幻燈片上以及在哪個位置(我命名了所有形狀,以便可以按名稱引用它們)。 我的代碼遍歷此表以獲取形狀並將其粘貼到指定的幻燈片。 這是我的代碼:

Dim nombrePic As String, auxi As String, i As Integer
Dim PPT As Object 
Dim PPSlide As PowerPoint.Slide
Dim numSlide As Integer, posVertical As Double, posHorizontal As Double

'Abrir PPT
Set PPT = CreateObject("PowerPoint.Application")
PPT.Visible = True
PPT.Presentations.Open "c:\prueba.pptx"

auxi = Sheets("FigurasResumen_RangPD").Cells(2, 5)
i = 2

Do
    Sheets("FigurasResumen_RangPD").Shapes(auxi).Copy

    'Get paste information about shape
    numSlide = Sheets("FigurasResumen_RangPD").Cells(i, 8)
    posHorizontal = Sheets("FigurasResumen_RangPD").Cells(i, 9)
    posVertical = Sheets("FigurasResumen_RangPD").Cells(i, 10)

    PPT.ActiveWindow.View.GotoSlide (numSlide)
    PPT.ActiveWindow.View.PasteSpecial DataType:=ppPasteDefault

    PPT.ActiveWindow.Selection.ShapeRange.Left = Format(Application.CentimetersToPoints(posHorizontal), "0.00")
    PPT.ActiveWindow.Selection.ShapeRange.Top = Format(Application.CentimetersToPoints(posVertical), "0.00")
    PPT.ActiveWindow.Selection.ShapeRange.ZOrder msoSendToBack

    i = i + 1
    auxi = Sheets("FigurasResumen_RangPD").Cells(i, 5)
Loop Until auxi = ""

結束子

當我第一次嘗試時,它工作正常。 我創建了一個示例PPT,一切進展順利。 一旦我更改了使用官方PPT的路徑(權重約120MB),它就會顯示以下錯誤:View.PasteSpecial:無效的請求。 剪貼板為空或包含的數據可能不會粘貼到此處。

任何想法為什么會發生這種情況?

[答案替換:我昨天寫了一個答案,但我認為這個答案更好。]

VBA認為“復制”和“粘貼”操作彼此無關。 它還異步執行-開始執行一條指令,然后在繼續執行前一條指令的同時繼續執行下一條指令。 如果第二條指令依賴於第一條指令,則不應該這樣做,但是“粘貼”只是從剪貼板中獲取任何東西,它不知道事情如何在剪貼板上發生。 特別是,它與之前的“復制”命令沒有特定關系。 然后,復制到剪貼板是一個緩慢的過程。 在剪貼板上的任何內容(或其中只有部分不完整的數據)之前,程序執行都會“粘貼”。

有兩種方法可以解決該問題。 一種是在粘貼命令之前添加“ Sleep xxx指令。 xxx是毫秒數-為了使Sleep正常工作,您需要在模塊頂部正確聲明它(它是Windows函數,而不是VBA函數)。 Google的“ VBA睡眠功能”或類似功能。 使用此解決方案,您必須嘗試使用​​xxx,有時2 ms就足夠了,有時50 ms是不夠的。 不是一個好的解決方案。

在您的情況下,更好的解決方案是聲明一個Shape變量,為其分配要復制的形狀,然后將其添加到目標幻燈片。 這應該起作用,因為在變量分配完成之前,不能將形狀(保存為Shape變量)添加到新幻燈片中。 當然,假設VBA有一種向幻燈片添加形狀的方法...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM