我想这很简单,但由于我在VBA中很新,我无法弄清楚。
我有一个代码,设计用于从第三个Excel电子表格复制数据并将其粘贴到Power Point演示文稿的多个图表中。
上面的代码和平打开了Power Point演示文稿和Excel电子表格。 dir_pptx
和dir_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.如果是,请不要再打开它并使用它们开始例程。
答案 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
然后在使用中,调用函数而不是直接引用包含表示的对象变量。