打开外部.pptx和.xlsx一次并在其上运行多个子例程

时间:2016-05-05 01:50:53

标签: excel excel-vba powerpoint-vba vba

我想这很简单,但由于我在VBA中很新,我无法弄清楚。

我有一个代码,设计用于从第三个Excel电子表格复制数据并将其粘贴到Power Point演示文稿的多个图表中。

上面的代码和平打开了Power Point演示文稿和Excel电子表格。 dir_pptxdir_xlsx是相应的文件路径。

Set ObjPPT = CreateObject("PowerPoint.Application")
Set ObjPresentation = ObjPPT.Presentations.Open("" & dir_pptx & "") 
Workbooks.Open Filename:=dir_xlsx  

关键是这个过程分为~6个独立的潜艇(它必须是这样的,我不想改变它),所以每次我必须更新演示时我必须运行{ {1}},保存/关闭sub1.pptx个文件,运行.xlsx,保存/关闭,运行sub2,保存/关闭等等,否则{ {1}}再次打开文件并对其进行更新,放弃我在sub3中所做的更改。

我的问题:如何修改此代码,以便首先检查文件是否已打开 如果他们不是,打开它; 2.如果是,请不要再打开它并使用它们开始例程。

2 个答案:

答案 0 :(得分:0)

这些顶级对象不会自动保存在集合中(不像所有Worksheet对象都在集合工作表中)。

您可以构建和维护自己的对象集合,稍后再使用它们......

(未经测试)代码段的扩展看起来像这样......

Set myObjCol = New Collection

Set ObjPPT = Nothing
For Each myObj In myObjCol
    If myObj.Name = "Microsoft PowerPoint" Then 'Already have PPT 
        Set ObjPPT = myObj
        Exit For
    End If
Next myObj
If ObjPPT Is Nothing Then
    Set ObjPPT = CreateObject("PowerPoint.Application") 'Create PPT
    myObjCol.Add ObjPPT
End If

Set ObjPresentation = Nothing
For Each myObj In myObjCol
    If myObj.Name = Filename Then 'The file is already open 
        Set ObjPresentation = myObj 
        Exit For
    End If
Next myObj
If ObjPresentation Is Nothing Then 'Open the file
    Set ObjPresentation = ObjPPT.Presentations.Open(PathName & Filename)
    myObjCol.Add ObjPresentation
End If

'... other code

在代码的其他部分,当文件关闭且应用程序退出时,您将需要使用集合的.Remove方法。

答案 1 :(得分:0)

另一种方法:(警告:AirCode未来)

Function PresentationObject() as Object

Dim objPPTApp as object
Static objPresentation as Object

If objPresentation is Nothing then

Set objPPTApp = CreateObject("PowerPoint.Application")
Set objPresentation = ObjPPTApp.Presentations.Open("" & dir_pptx & "")

End if

Set PresentationObject = objPresentation

End Function

然后在使用中,调用函数而不是直接引用包含表示的对象变量。