簡體   English   中英

從 Excel VBA 運行 Powerpoint sub

[英]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!UpdateOLELinksUpdateOLELinks即。 文件和 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM