我在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应用程序:
单击“只读”或“通知”将关闭Excel应用程序,PPT将不再挂起。
我尝试了什么
我想我需要自动打开testing.xlsx
为只读。根据{{3}},似乎我可以使用
链接参数。
确定OLE对象是否将链接到创建它的文件。如果为ClassName指定了值,则此参数必须为msoFalse。
但是,将此参数更改为msoTrue
或msoFalse
仍然无法解决任何问题。
P.S。在Windows 7中,不会发生此问题。我目前正在使用Windows 10。
答案 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
运行时崩溃,则存在重大风险,该文件仍处于只读状态,您必须手动将其更改回来。