[英]Run Powerpoint sub from Excel VBA
我需要從 Excel 中的子程序運行 PowerPoint 子程序。 原因是大多數 PowerPoint 操作在從 PowerPoint 中的子程序運行時比從 Excel 中的子程序運行時運行得更快並且錯誤更少。
我正在嘗試使用Application.Run(Macroname_As_String)
,其中我使用PptApp
代替Application
並且PptApp
加載為:
Dim PptApp As PowerPoint.Application
Set PptApp = CreateObject("PowerPoint.Application")
我嘗試將 VBA 腳本稱為Presentation1.pptm!UpdateOLELinks
和UpdateOLELinks
即。 文件和 VBA 腳本/只是 VBA 腳本。
我收到錯誤:
“對象‘_Application’的方法‘運行’失敗”。
我的 VBA 腳本UpdateOLELinks
位於Presentation1
Module1
中。
有任何想法嗎?
PowerPoint中的 “ 運行方法”需要參數 : msdn.microsoft.com/fr-fr/library/office/Ff744221.aspx
因此,即使您傳遞了一個空數組,也可以嘗試執行以下操作:
PptApp.Run Macroname_As_String, Parameters_As_Array
在研究時,我偶然發現了其他未經檢驗的可能性(有您的參考資料供參考):
Dim PptApp As PowerPoint.Application
Set PptApp = CreateObject("PowerPoint.Application")
Set Ppt1 = PptApp.Presentations.Open(PptPath, msoFalse, msoTrue, msoTrue)
'Possibility 1
PptApp.Run Macroname_As_String, Parameters_As_Array
'Possibility 2
Ppt1.PptApp.Run Macroname_As_String, Parameters_As_Array
'Possibility 3
PptApp.Run "'" & Ppt1.name & "'!" & Macroname_As_String, Parameters_As_Array
'Possibility 4
PptApp.Run Module_Name.Macroname_As_String, Parameters_As_Array
'Possibility 5
PptApp.Run "'" & Ppt1.name & "'!" & Module_Name.Macroname_As_String, Parameters_As_Array
我在這里找到了答案,其中“ UpdateOLELinks”是PowerPoint子名稱,並且在鍵入時進行實時編譯的選項未被禁用(默認情況下處於啟用狀態): https : //www.ozgrid.com/forum/forum /其他軟件的應用程序/ Excel的和有或PowerPoint中的幫助/ 26816-開PPT和運行-A-預先寫好的宏
從ASHOK_SHARMA02:
Dim PPApp As PowerPoint.Application
Set PPApp = CreateObject("PowerPoint.Application")
PPApp.AddIns.Application.Run ("UpdateOLELinks"), ""
在嘗試了大量可能的解決方案之后,它為我工作。
[edit]實際上,當從VBA運行PPT時,它再次崩潰。 原因是VBA模塊尚未激活,所以類似PPT的東西不知道它存在(瘋狂吧?)。 因此,添加行
PPApp.VBE.ActiveVBProject.VBComponents.Item("Module1").Activate
有兩個問題(對於PowerPoint來說似乎是唯一的),需要參數,並且宏名稱必須完全合格。
限定宏時,請勿像對Excel那樣使用單引號。 而是,即使文件名包含空格,也請使用以下命令:
PptApp.Run Ppt1.Name & "!Module1.UpdateOLELinks"
如果傳遞的參數與宏的參數不匹配,也會出現該錯誤。 確保宏具有定義的參數來接收(匹配類型),即使它不使用它也是如此。
很久以前就有人問過這個問題,但如果有人需要答案,以下內容對我有用。
Dim objPP As Object
Dim objPPFile As Object
Set objPP = CreateObject("PowerPoint.Application")
objPP.Visible = True
Set objPPFile = objPP.Presentations.Open(PptPath)
Application.EnableEvents = False
' "filename !Module1.macro_name"
objPP.Run "post_processing_V2.pptm!Module1.code"
objPPFile.Close
objPP.Quit
Set objPPFile = Nothing
Set objPP = Nothing
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.