如何使用addOLEObject函数打开只读文件?

时间:2017-05-02 11:12:25

标签: vba powerpoint

我在PPT幻灯片中有一个按钮[DisplayChart],它使用AddOLEObject将Excel图表嵌入到幻灯片中。

Set shapeOnPPT = 
ActivePresentation.Slides.FindBySlideID(mySlideID).Shapes.AddOLEObject(Left:=100,_
Top:=100, Width:=500, Height:=400, FileName:="c:\ThisDoc\Tester123.xlsx", Link:=msoTrue)

问题

当我进入演示者视图并点击[DisplayButton]并且Tester123.xlsx被其他用户打开时,PPT会挂起'。 ctrl-alt-del显示已使用此提示消息打开的Excel应用程序:

enter image description here

单击“只读”或“通知”将关闭Excel应用程序,PPT将不再挂起。

我尝试了什么

我想我需要自动打开testing.xlsx为只读。根据{{​​3}},似乎我可以使用 链接参数。

  

确定OLE对象是否将链接到创建它的文件。如果为ClassName指定了值,则此参数必须为msoFalse。

但是,将此参数更改为msoTruemsoFalse仍然无法解决任何问题。

P.S。在Windows 7中,不会发生此问题。我目前正在使用Windows 10。

2 个答案:

答案 0 :(得分:0)

没有能够测试它,但你可以试试这个

Application.DisplayAlerts = false   
Set shapeOnPPT = 
ActivePresentation.Slides.FindBySlideID(mySlideID).Shapes.AddOLEObject(Left:=100,_
Top:=100, Width:=500, Height:=400, FileName:="c:\ThisDoc\Tester123.xlsx", Link:=msoTrue)    
Application.DisplayAlerts = true

答案 1 :(得分:0)

显然,没有参数/函数允许我们在添加OLE对象时执行此操作。最接近的可能是使用SetAttr function将文件设置为只读,然后再打开它。这允许多个程序查看文件的内容。

e.g。

SetAttr "c:\ThisDoc\Tester123.xlsx", vbReadOnly
Set shapeOnPPT = 
ActivePresentation.Slides.FindBySlideID(mySlideID).Shapes.AddOLEObject(Left:=100,_
Top:=100, Width:=500, Height:=400, FileName:="c:\ThisDoc\Tester123.xlsx", Link:=msoTrue)
SetAttr "c:\ThisDoc\Tester123.xlsx", vbNormal

注意:请务必在运行该功能后将其设置为vbNormal,否则当其他程序尝试访问该文件时可能会出现问题。

此外,如果您的应用程序在.addOLEObject运行时崩溃,则存在重大风险,该文件仍处于只读状态,您必须手动将其更改回来。