Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何使用addOLEObject函数以只读方式打开文件?_Vba_Powerpoint - Fatal编程技术网

Vba 如何使用addOLEObject函数以只读方式打开文件?

Vba 如何使用addOLEObject函数以只读方式打开文件?,vba,powerpoint,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)

我在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)
问题

当我进入presenter视图并单击[DisplayButton]时,
Tester123.xlsx
被另一个用户打开,PPT将“挂起”。ctrl-alt-del显示Excel应用程序已打开,并显示以下提示消息:

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

我尝试过的

我想我需要以只读方式自动打开
testing.xlsx
。据我所知,我似乎可以使用 链接参数

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

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


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

无法测试它,但您可以试试这个

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

显然,在添加OLE对象时,没有任何参数/函数允许我们这样做。最接近的方法是在打开文件之前使用设置文件为只读。这允许多个程序查看文件内容

e、 g

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


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

不起作用。。。我不需要隐藏显示警报。。。我只需要以编程方式以只读方式打开
.xlsx
文件。可能您可以尝试使用Application.SendKeys(“~”)方法
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