1

位置とアニメーション効果/順序を保持しながら、PowerPoint2010 プレゼンテーションのすべての方程式を画像に変換するマクロを準備しようとしています。

ここで提供されたヒント(Steve Rindsberg のおかげ) に基づいて、スクリプトを次のように変更しました。

    Sub ConvertAllShapesToPic()
    Dim oSl As Slide
    Dim oSh As Shape

    On Error Resume Next

    For Each oSl In ActivePresentation.Slides
        For Each oSh In oSl.Shapes
            ' modify the following depending on what you want to
            ' convert
            Select Case oSh.Type
                Case msoTextBox, msoEmbeddedOLEObject, msoLinkedOLEObject
                    ConvertShapeToPic oSh
                Case Else
            End Select
        Next
    Next

NormalExit:
    Exit Sub

ErrorHandler:
    Resume Next

End Sub

Sub ConvertShapeToPic(ByRef oSh As Shape)
    Dim oNewSh As Shape
    Dim oSl As Slide

    Set oSl = oSh.Parent
    oSh.Copy
    Set oNewSh = oSl.Shapes.PasteSpecial(ppPasteEnhancedMetafile)(1)
    oSh.PickupAnimation
    oNewSh.ApplyAnimation
    With oNewSh
        .Left = oSh.Left
        .Top = oSh.Top
        Do
            .ZOrder (msoSendBackward)
        Loop Until .ZOrderPosition = .ZOrderPosition
        .AnimationSettings.AnimationOrder = oSh.AnimationSettings.AnimationOrder
    End With
    oSh.Delete

NormalExit:
    Exit Sub

ErrorHandler:
    Resume Next

End Sub

このスクリプトの問題:

  1. すべての方程式が画像に変換されていません。
  2. 方程式のない一部のテキスト ボックスは、内部のアニメーション効果 (クリック時に 2 番目の箇条書きテキストを表示するなど) を失います。

このスクリプトを作成する理由は、PowerPoint 2010 を Articulate プレゼンテーションに変換すると、Articulate 09 が PPT2010 の数式を完全にサポートしていないため、数式が適切にレンダリングされないためです。

私は 100 を超える PPT を持っており、ほぼすべてのスライドに数式が含まれています。プログラムによる方法がなければ、すべての方程式を手動で変換し、アニメーション効果を再適用するしかありません!

あなたが提供できる助けに感謝します:-)

ありがとう!

4

2 に答える 2

0
Sub Test()
    Dim oSh As Shape

    For Each oSh In ActivePresentation.Slides(1).Shapes
        DoSomethingToEachShape oSh
    Next

End Sub

Sub DoSomethingToEachShape(oSh As Shape)
    Dim x As Long
    If oSh.Type = msoGroup Then
        For x = 1 To oSh.GroupItems.Count
            DoSomethingToEachShape oSh.GroupItems(x)
        Next
    Else
        Debug.Print oSh.Name
    End If
End Sub
于 2012-11-30T15:44:24.977 に答える
0

最初の問題に関しては、私の悪い点:

このため:

For Each oSl In ActivePresentation.Slides
        For Each oSh In oSl.Shapes
            ' modify the following depending on what you want to
            ' convert
            Select Case oSh.Type
                Case msoTextBox, msoEmbeddedOLEObject, msoLinkedOLEObject
                    ConvertShapeToPic oSh
                Case Else
            End Select
        Next
Next

代わりの:

Dim x as long 

For x = ActivePresentation.Slides.Count to 1 Step -1
        Set oSl = ActivePresentation.Slides(x)
        For Each oSh In oSl.Shapes
            ' modify the following depending on what you want to
            ' convert
            Select Case oSh.Type
                Case msoTextBox, msoEmbeddedOLEObject, msoLinkedOLEObject
                    ConvertShapeToPic oSh
                Case Else
            End Select
        Next
Next

これを最初に書いたとき、おそらくスライドごとに 1 つの式でスライドをテストしただけです。コレクションをステップ実行してメンバーを削除する場合は、逆方向にステップ実行する必要があります。そうしないと、メンバーを削除するときにインデックス作成が混乱します。

于 2012-11-15T16:10:16.137 に答える