如何从Excel中为嵌入式PPTM文件运行PPTM宏

时间:2019-04-08 14:34:02

标签: excel vba powerpoint powerpoint-vba

我有一个.PPTM嵌入到工作表中的Excel文件(工作表上没有其他内容)。我想运行PPTM文件中的宏。 问题是运行宏的最后一行代码。具有嵌入文件的工作表“ PPTM”中的单元格的公式为“ = EMBED(“ Presentation”,“”)“

Sub run_ppt_macro()
fName = ActiveWorkbook.Name
Path = ActiveWorkbook.Path


Worksheets("PPTM").OLEObjects("PPT_Temp_19").Verb 0
Dim PPTObj As Object
Set myPP = GetObject(, "PowerPoint.Application")

Set PPTObj = myPP.ActivePresentation

PPTObj.Run PPTObj.Name & "!Main", fName, Path
End Sub

1 个答案:

答案 0 :(得分:0)

感谢Shyam,这是问题的一部分。因为文件是通过IE或电子邮件打开的,所以它在一个很奇怪的地方打开,从而使宏出错。在创建新报告之前,我通过将数据(XLSM)文件和模板(PPTM)文件都保存到temp目录中来解决了这个问题。

Sub auto_open()
Application.ScreenUpdating = False
Application.DisplayAlerts = False

fName = ActiveWorkbook.Name

tempath = IIf(Environ$("tmp") <> "", Environ$("tmp"), Environ$("temp"))    'finds the temporary evironment on the current machine
ActiveWorkbook.SaveAs Filename:=(tempath & "\" & fName)


MsgBox "Your report " & tempath & "\" & fName & " should be completed within 5 minutes." & Chr(10) & Chr(10) & "Please check your PowerPoint application at that time." & Chr(10) & Chr(10) & "Thank you.", vbInformation


Dim PPTObj As Object
Worksheets("PPTM").OLEObjects("PPT_Temp_19").Verb 3  'opens the embedded object

Set myPP = GetObject(, "PowerPoint.Application")   'get the PowerPoint object
Set PPTObj = myPP.ActivePresentation  'Get the presentation that was opened

tempath = IIf(Environ$("tmp") <> "", Environ$("tmp"), Environ$("temp"))    'finds the temporary evironment on the current machine
Template = tempath & "\template.pptm"   'creates path and name for temp file
PPTObj.SaveAs Filename:=(Template)      'saves temp file

myPP.Presentations.Open (Template)    'opens the saved file

Worksheets("PPTM").OLEObjects("PPT_Temp_19").Object.Close


myPP.Run Template & "!Main", fName, tempath   'runs the macro

Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub