我有一个包含两张幻灯片的 PowerPoint (2010) 演示文稿。两张幻灯片都包含一张图片(两张不同的图片),演示文稿设置为无限循环,直到ESC按下 。
Excel 文件每 5 分钟导出一次 PowerPoint 演示文稿中使用的两幅图像(它们是图表,但我无法在 PowerPoint 中使用链接到 Excel 文件的图表,因为 PowerPoint 会以某种方式破坏图表)。这些图像与原始图像不同,并且 Excel 设置为覆盖现有图像。我推测,PowerPoint 丢失了与文件的链接,因为“新”图像与“原始”图像不同。
有谁知道解决方案或其他方法吗?
答案1
我在幻灯片放映期间从互联网上更新天气图像时也遇到过这种情况。
由于 Powerpoint 在幻灯片放映时将图像文件存储在其自身内,因此它不会更新图像。
这意味着你必须使用以下方式触发它来更新链接VBA 代码或使用类似的插件;在幻灯片放映期间更新链接 PowerPoint 97 或更高版本的加载项或者LiveImage - 在 PowerPoint 中实时更新插入的链接图像。
我不再使用该程序,也找不到我曾经使用过的代码。上述信息应该可以帮助您实现目标。
答案2
以下方法对我有用。首先,安装插件自动事件。在下面的示例中,使用了 2 张幻灯片的连续 PowerPoint 演示文稿(如果有更多幻灯片,请将第三个宏中的 if 语句更改为最后一张幻灯片的编号)。创建三个子项,执行相同的操作:
- 子自动显示开始()
- 子自动打开()
- 子OnSlideShowPageChange(ByVal SSW 作为 SlideShowWindow)
Auto_ShowBegin() 和 Auto_Open() 相同。
Sub Auto_ShowBegin()
Dim sldTemp As Slide
Dim lngTemp As Long
Dim lngCount As Long
Dim myImage As Shape
For Each sldTemp In ActivePresentation.Slides
For lngCount = sldTemp.Shapes.Count To 1 Step -1
With sldTemp.Shapes(lngCount)
If .Type = msoPicture Then
.Delete
End If
End With
Next
Next
Set sldTemp = ActivePresentation.Slides(1)
Set myImage = sldTemp.Shapes.AddPicture( _
FileName:="C:\Users\Name\image1.png", _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, Left:=(ActivePresentation.PageSetup.SlideWidth / 2), _
Top:=(ActivePresentation.PageSetup.SlideHeight / 2))
myImage.Left = (ActivePresentation.PageSetup.SlideWidth / 2) - (myImage.Width / 2)
myImage.Top = (ActivePresentation.PageSetup.SlideHeight / 2) - (myImage.Height / 2)
Set sldTemp = ActivePresentation.Slides(2)
Set myImage = sldTemp.Shapes.AddPicture( _
FileName:="C:\Users\Name\image2.png", _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, Left:=(ActivePresentation.PageSetup.SlideWidth / 2), _
Top:=(ActivePresentation.PageSetup.SlideHeight / 2))
myImage.Left = (ActivePresentation.PageSetup.SlideWidth / 2) - (myImage.Width / 2)
myImage.Top = (ActivePresentation.PageSetup.SlideHeight / 2) - (myImage.Height / 2)
End Sub
第三个宏:
Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
Dim sldTemp As Slide
Dim lngTemp As Long
Dim lngCount As Long
Dim myImage As Shape
' AUTO UPDATE OF OLE LINKS MACRO
'
If SSW.View.CurrentShowPosition = 2 Then
For Each sldTemp In ActivePresentation.Slides
For lngCount = sldTemp.Shapes.Count To 1 Step -1
With sldTemp.Shapes(lngCount)
If .Type = msoPicture Then
.Delete
End If
End With
Next
Next
Set sldTemp = ActivePresentation.Slides(1)
Set myImage = sldTemp.Shapes.AddPicture( _
FileName:="C:\Users\Name\image1.png", _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, Left:=(ActivePresentation.PageSetup.SlideWidth / 2), _
Top:=(ActivePresentation.PageSetup.SlideHeight / 2))
myImage.Left = (ActivePresentation.PageSetup.SlideWidth / 2) - (myImage.Width / 2)
myImage.Top = (ActivePresentation.PageSetup.SlideHeight / 2) - (myImage.Height / 2)
Set sldTemp = ActivePresentation.Slides(2)
Set myImage = sldTemp.Shapes.AddPicture( _
FileName:="C:\Users\Name\image2.png", _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoTrue, Left:=(ActivePresentation.PageSetup.SlideWidth / 2), _
Top:=(ActivePresentation.PageSetup.SlideHeight / 2))
myImage.Left = (ActivePresentation.PageSetup.SlideWidth / 2) - (myImage.Width / 2)
myImage.Top = (ActivePresentation.PageSetup.SlideHeight / 2) - (myImage.Height / 2)
End If
End Sub