2016-03-28 24 views
0

ShapeとSlideオブジェクトを渡すPowerpoint VBA関数を開発しました。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の種類のコンテンツをクリップボードで利用できるようにするためにも、ペースト操作を続行する前にWinAPIを使用しても、これを賢明に解決しようと時間を費やしています。

私が見つけた唯一の解決策は、遅れて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

関連する問題