PowerPoint VBA:幻灯片母版媒体的SlideShowView.Player调用问题
PowerPoint母版媒体的Player对象获取方案
为啥用母版ID调用Player()会报错
你猜的完全对——幻灯片母版的形状ID和普通幻灯片的ID是两套完全独立的体系,SlideShowView.Player()只认当前普通幻灯片(包括从母版继承来的实例化形状)的ID,直接传母版的ID自然会触发“无效形状ID”的错误。
两种可行的解决办法
1. 遍历当前幻灯片形状获取Player对象
母版里的媒体在普通幻灯片上会生成对应的关联实例形状,你可以遍历当前放映幻灯片的所有形状,筛选出媒体类型的形状,用它的ID来调用Player():
Dim targetShp As Shape Dim mediaPlayer As Player ' 遍历当前放映幻灯片的所有形状 For Each targetShp In ActivePresentation.SlideShowWindow.View.Slide.Shapes ' 先判断是不是媒体形状 If targetShp.Type = msoMedia Then ' 如果只找视频,再加一层判断 If targetShp.MediaType = ppMediaTypeMovie Then ' 通过当前幻灯片形状ID获取Player对象 Set mediaPlayer = ActivePresentation.SlideShowWindow.View.Player(targetShp.ID) ' 这里就可以操作媒体了,比如获取播放时长:mediaPlayer.Duration Exit For ' 找到目标就退出循环 End If End If Next targetShp
2. 从Player对象反向定位母版原始媒体
如果已经拿到了Player对象,要找到母版里的原始媒体形状,可以通过Player关联的形状追溯:
' 假设已经获取到了mediaPlayer对象 Dim slideMediaShp As Shape Dim masterMediaShp As Shape ' 先拿到当前幻灯片上的媒体实例形状 Set slideMediaShp = ActivePresentation.SlideShowWindow.View.Slide.Shapes(mediaPlayer.ShapeID) ' 检查该形状是否来自母版 If Not slideMediaShp.MasterShape Is Nothing Then Set masterMediaShp = slideMediaShp.MasterShape ' masterMediaShp就是母版里的原始媒体形状了 End If
关键提醒
幻灯片放映时,母版中的媒体是作为当前普通幻灯片的实例形状存在的,所以必须用当前幻灯片的形状ID来调用Player(),不能直接用母版的ID。如果母版里有多个媒体,记得通过Name或MediaType等属性精准定位目标。
内容的提问来源于stack exchange,提问作者unsynchronized
相关产品推荐
相关产品推荐

