2016-10-31 73 views
0

私は他のプレゼンテーションからパワーポイントプレゼンテーションを生成するExcel VBAマクロをプログラミングしています。最後に、コンテンツスライドが生成されます。トピックに応じて、スクリプトはこのトピックの関連する画像を画像プレースホルダにコピーする必要があります。現時点では、コンテンツスライドには正しいテキストボックス(トピック名)が入力されていますが、画像を挿入しても機能しません。すべてのスライド イメージ画像ホルダーを挿入するvba powerpointを

    1. ループあなたはその後、「コンテンツ」という名前の形状のスライドを見つけた場合::

      Intentend擬似コード

    2. コピーに「画像パス」にある画像画像プレースホルダー「FeaturePic2」(例えば)。

    私はコードを例に縮小しましたが、これはうまくいきません。コードの役割は次のとおりです。 "Content"という名前の図形がなくても、画像パス画像を各スライドにコピーします。次に、「FeaturePic2」(このスライドの2番目のプレースホルダー)には挿入されませんが、見つかった最初のプレースホルダーが挿入されます。

    '<<BEGIN>> 
    On Error Resume Next 
    template_path = "C:\test\test.pptx" 
    image_path = "C:\test\test.jpg" 
    Set pres_template = pptApp.Presentations.Open(template_path) 
    
    
    For Each slide In pres_template.Slides 
    
         If Shape.Name = ("Content") Then 
         slide.Shapes.Placeholders("FeaturePic2").Select msoTrue 
         slide.Shapes.AddPicture Filename:=image_path, LinkToFile:=False, SaveWithDocument:=True, Left:=10, Top:=10 
         End If 
    
    Next slide 
    
    '<<END>> 
    

    追加の質問:特定の名前のプレースホルダを削除するにはどうすればよいですか?

    事前に敬具と感謝

  • +0

    「うまくいかない」とはどういう意味ですか?また、写真を展開するセルに名前を設定しようとしましたか? – FDavidov

    +0

    動作しません:「コンテンツ」という名前の図形がなくても、画像パスピクチャを各スライドにコピーします。次に、「FeaturePic2」(このスライドの2番目のプレースホルダー)には挿入されませんが、見つかった最初のプレースホルダーが挿入されます。 セルの名前についてパワーポイントのスライドを作成したいスクリプトは、表を読み込み、この表に基づいてプレゼンテーションを読み込む必要があるため、Excel vbaスクリプトから制御されます。私はあなたの質問を正しく理解してくれることを願っています。 – DarylMusashi

    +0

    そして、どのアプリケーションでVBA、Excel、PowerPoint、またはコマンドライン経由で実行していますか? – FDavidov

    答えて

    0

    以下の変更は、「コンテンツ」という名前の画像があると仮定して、正しい画像を得ることを支援する必要があります

    On Error Resume Next 
    template_path = "C:\test\test.pptx" 
    image_path = "C:\test\test.jpg" 
    Set pres_template = pptApp.Presentations.Open(template_path) 
    
    ' Always DIM your variables and 
    ' Never use reserved names as variable names 
    ' 
    Dim oSl as slide 
    Dim oSh as shape 
    
    For Each oSl In pres_template.Slides 
        For each oSh in oSl.Shapes 
    
         If oSh.Name = ("Content") Then 
         oSl.Shapes.Placeholders("FeaturePic2").Select msoTrue 
         oSl.Shapes.AddPicture Filename:=image_path, LinkToFile:=False, SaveWithDocument:=True, Left:=10, Top:=10 
         End If 
    
    Next ' slide 
    

    次に、いくつかの特定の理由があります画像を新しい絵の形として追加するのではなく、プレースホルダに置くためのものですか?それはより簡単で信頼性の高いものになります。

    プレースホルダを使用する必要がある場合、ダミーテキストやその他のコンテンツを任意のプレースホルダに配置する必要があります。その場合、画像をランダムにドロップしないでください。

    +0

    プレースホルダを使用する理由があると思いますが、プレゼンテーションに2つのコンテンツスライドがあります(最初のスライドはスライド3に固定され、2番目のスライドの位置は可変です)。私の考えは、すべてのプレースホルダーを「FeaturePic1」から「FeaturePic10」に命名して、各フィーチャーの関連ピクチャーを各フィーチャーピクチャーの「FeaturePic」&iプレースホルダーにドロップすることでした。 – DarylMusashi

    +0

    を使用する方が簡単です。それらの名前の長方形(FeaturePic1など)...正しい形状を名前で見つけ、スライドに追加した新しい画像に適用する座標を選択してから、その形状を削除します。 –

    +0

    ありがとうございました(特にFDavidovとSteve)。私はPowerpointマクロに切り替えました。これは、Application.Run経由でExcelマクロによって呼び出されます。これははるかに優れています。 – DarylMusashi