5

誰かが VBA コードで私を助けてくれることを願っています。VBA ループを使用して、Excel のグラフ、テキスト ボックス、表を Powerpoint テンプレートに貼り付けます。ただし、ユーザーが Powerpoint Object Library をインストールするかどうか確信が持てないため、Dim PPTApp を Powerpoint.Application タイプの構文として使用することはできません。

オブジェクトを使用します。それはうまくいきます。1 つを除いて: Powerpoint を閉じます。

コード:

Dim oPPTPres As Object  ' Late binding: This is a PowerPoint.Presentation but we cannot assume that the Microsoft PowerPoint 11 library will be loaded in the workbook that this module has been copied to.
Dim oPPTShape As Object ' Late binding: This is a PowerPoint.Shapebut we cannot assume that the Microsoft PowerPoint 11 library will be loaded in the workbook that this module has been copied to.


PPTFile = Range("PPTFile").value ' Read PowerPoint template file name
Set oPPTPres = GetObject(PPTFile): oPPTPres.Application.Visible = msoTrue ' Switch to or open template file

. . . .

strNewPresPath = Range("OutputFileName").value
oPPTPres.SaveAs strNewPresPath
' Range("PPTFile").value = strNewPresPath
ScreenUpdating = True
oPPTPres.Close 'Closes presentation but not Powerpoint
oPPTPres.Application.Quit 'No noticeable effect

アクティブなプレゼンテーションは閉じますが、Powerpoint 自体は開いたままです (ファイル ウィンドウは開いていません)。次に、それが開いているため、次のものが実行されると (ループしてこれらのビルドの多くを連続して実行するループがあります)、テンプレートと最新のビルドされた Powerpoint ファイルが開き、システムが作成されます。ロックの問題。

何か案は?

ご助力ありがとうございます!

4

4 に答える 4

6

コードが機能しない理由が完全にはわかりません。提案どおりに設定しようとしましoPPTPres = Nothingたが、どちらも機能しませんでした。ただし、次の方法でPowerPointをコンピューターで閉じます

Dim oPPTPres As Object  ' Late binding: This is a PowerPoint.Presentation but we cannot assume that the Microsoft PowerPoint 11 library will be loaded in the workbook that this module has been copied to.
Dim oPPTShape As Object ' Late binding: This is a PowerPoint.Shapebut we cannot assume that the Microsoft PowerPoint 11 library will be loaded in the workbook that this module has been copied to.
Dim oPPTApp As Object

Set oPPTApp = CreateObject("PowerPoint.Application")
oPPTApp.Visible = True

Set oPPTPres = oPPTApp.Presentations.Open(PPTFile)

...

oPPTPres.Close
Set oPPTPres = Nothing
oPPTApp.Quit
Set oPPTApp = Nothing
于 2012-08-28T18:06:34.237 に答える
4

JMP、

メモリからオブジェクトを削除するという点ではショーンは正しいですが、パワーポイントへのポインターを他の変数に保存する場合に備えて、パワーポイント オブジェクトへの直接参照もすべて解放する必要があります。ただし、これによってアプリケーションが強制終了されたり、スレッドが停止したりすることはありません。単にアプリケーション変数の割り当てが解除されるだけです。

パワーポイントをシャットダウンする Paul B の方法は正常に機能するはずです。また、このSO 記事には、アプリケーションがメモリに残っている場合にアプリケーションをシャットダウンするソフトな方法と力ずくの方法があります。

私はこの単純な力ずくの方法を、Excel から私のマシンの比較的パーミッションが制限された設定に適用してテストしたところ、すぐに Powerpoint アプリケーションが強制終了されました。

Sub ForcePowerpointExit()


Dim BruteForce As String
BruteForce = "TASKKILL /F /IM powerpnt.exe"

Shell BruteForce, vbHide

End Sub

したがって、アプリケーションを強制終了するための別のオプションが提供されます。

于 2012-08-28T18:08:52.393 に答える
0

Set oPPTPres = Nothingオブジェクトへの Excel の参照を削除し、(できれば) メモリから解放する必要があります。

于 2012-08-28T17:58:09.277 に答える