2016-03-28 103 views
0

我開發了一個Powerpoint VBA函數,我將其傳遞給一個Shape和Slide對象。PowerPoint VBA - 將形狀複製到幻燈片

該功能找到一個帶有文字LOGO的形狀,如果找到它,它會用我傳遞給該函數的形狀替換該形狀。

功能完美的作品在辦公室2013,但不是在辦公室2016年

可有人請各地提出一個工作呢?

Public Sub AddLogo_ONE(shLogo As Shape, oSlide As PowerPoint.Slide) 
    Dim sh As Shape 

    For Each sh In oSlide.Shapes 
     If sh.HasTextFrame Then 
      If UCase(sh.TextFrame2.TextRange.Text) = "LOGO" Then 
       oSlide.Select 
       DoEvents: DoEvents 
       shLogo.Copy 
       With oSlide.Shapes.Paste 
        .LockAspectRatio = msoFalse 
        .Left = sh.Left 
        .Top = sh.Top - ((.Height - sh.Height)/2) 
        .AlternativeText = "LogoMacro" 
        sh.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(255, 255, 255) 
       End With 
       Exit For 
      End If 
     End If 
    Next 
End Sub 

下面是錯誤消息我得到的簡報2016年 enter image description here

回答

1

這是用VBA /剪貼板/ WinOS可怕的機器相關的計時問題。我個人花了幾個小時試圖爲此設計一個聰明的解決方案,甚至在繼續進行粘貼操作之前,使用WinAPI檢查並等待剪貼板中的PowerPoint類型的內容可用,都無濟於事。

我發現唯一的解決方案是延遲VBA的速度。討厭的解決方法,因爲它仍然依賴於機器。這是該功能使用:

Public Sub Delay(Seconds As Single, Optional DoAppEvents As Boolean) 
    Dim TimeNow As Long 
    TimeNow = Timer 
    Do While Timer < TimeNow + Seconds 
    If DoAppEvents = True Then DoEvents 
    Loop 
End Sub 

如果調用此如下(從1秒縮短時間,直到它失敗,然後再加倍!),它應該解決您的問題:

shLogo.Copy 
Delay 1, True 
With oSlide.Shapes.Paste 
+0

謝謝!將檢查客戶端並更新你。 – Tejas

相關問題