none
PowerPoint 2016のマクロを実行中に起こるトラブルの件 RRS feed

  • 質問

  • PowerPoint 2016のマクロを使って、プレゼンテーションファイルを開いてスライドショーを実行しています。

    その処理を連続実行していると、スライドショーの実行が止まるときがあります。

    連続実行している処理の概要は下記の通りです。

    ----------------------------------------------------------------------------------------------------------------------------

    VS2015のVBアプリケーションで、Process.Start()によりマクロを起動する

                                   ↓

    古いスライドショーを終了する

      Application.Presentations("古いファイル名").SlideShowWindow.View.Exit

                                   ↓

    新しいプレゼンテーションファイルを開く

      Application.Presentations.Open "新しいファイル名", msoTrue, msoFalse, msoFalse

                                   ↓

    新しいプレゼンテーションファイルのスライドショーを実行する

            With Application.Presentations("新しいファイル名")

                With .SlideShowSettings

                    .RangeType = ppShowAll

                    .StartingSlide = 1

                    .EndingSlide = 1

                    .Run

                End With

                .SlideShowWindow.Left = 1440

            End With

    ----------------------------------------------------------------------------------------------------------------------------

    この処理を連続実行しています。

    29415回正常に実行されました。

    その次の実行で、スライドショーを実行するところで止まってしまいました。

    通常の正常実行時の画面についてです。

    マクロ(pptm)、プレゼンテーションファイルのスライドショーが表示されています。

    スライドショーが止まってしまったときの画面についてです。

    マクロ(pptm)と、プレゼンテーションファイルが表示されています。

    スライドショーは表示されていません。

    又、マクロ(pptm)とプレゼンテーションファイル両方とも、"ドキュメントの回復"と

    表示されていて、保存と回復が実行されたことになっています。

    上記の連続実行でスライドショーが止まる原因としてどのようなことが考えられる

    でしょうか。

    連続実行でこのようなトラブルが発生しないようにしたいです。

    対策方法があれば、教示をお願いします。

    よろしくお願い申し上げます。

    2019年5月14日 1:15

すべての返信

  • PowerPoint は、ほぼ分かりませんが、29415回正常に実行されました。とありますので、タスクマネージャのメモリを確認してみてください。数値が、実行と共に大きくなっていませんか? 
    回数や実行オブジェクトから推察してメモリーリソースの枯渇で実行時エラーが発生しているのではないでしょうか。(昔はよく苦しめられた)的違いならすみません。
     Application オブジェクトのプロパティである ActivePresentation 、 ActiveWindow 、 AddIns 、 Presentations 、SlideShowWindows 、および Windows は、オブジェクト修飾子を指定せずに使用できますが、
    巨大なオブジェクトを扱う、ループの回数が多い、長時間プログラムを実行し続けるなどの場合には、参照カウンタのデクリメントを意識しながら使用の終わったオブジェクトを確実に開放しないと、メモリーリソースの枯渇で実行時エラーが発生する。
    参照カウンタを明示的にデクリメントできるような実装方法なっていないのであれば、原因の一つかもしれません。

    内容は、PowerPointではありませんが、、
    参考:VBAメモリーリークについて https://teratail.com/questions/23082
    参考:メモリーの解放方法・タイミング https://www.sejuku.net/blog/78974
    2019年5月21日 15:21