Vba 自动更新PowerPoint幻灯片中的每张图片

Vba 自动更新PowerPoint幻灯片中的每张图片,vba,powerpoint,Vba,Powerpoint,我有一个非常大和复杂的PowerPoint,每一张幻灯片都有一张全尺寸的图片作为背景。我有一个目录,里面满是这些背景图片,都是JPEG的。有时我会更改这些照片,这些照片是用Photoshop制作的,当我更改它们时,我会将它们保存在同一目录中的原始JPEG上 然后我必须在PowerPoint中更新它们。手动功能是在照片上单击鼠标右键,然后单击“替换照片”,然后从“文件”菜单中选择新的JPEG。我想用Visual Basic编写一个宏,它将贯穿整个幻灯片,并从更新的JPEG重新加载图形,而无需手动执

我有一个非常大和复杂的PowerPoint,每一张幻灯片都有一张全尺寸的图片作为背景。我有一个目录,里面满是这些背景图片,都是JPEG的。有时我会更改这些照片,这些照片是用Photoshop制作的,当我更改它们时,我会将它们保存在同一目录中的原始JPEG上

然后我必须在PowerPoint中更新它们。手动功能是在照片上单击鼠标右键,然后单击“替换照片”,然后从“文件”菜单中选择新的JPEG。我想用Visual Basic编写一个宏,它将贯穿整个幻灯片,并从更新的JPEG重新加载图形,而无需手动执行。我不知道这是否可能,因为我不知道PowerPoint是否真的记得它放置的每张图片的路径和文件名

是否有一个picture属性,其中包含用于粘贴图片的路径和文件名?如果有,我可以找到该属性,查询它,并将其用作重新加载的路径,从而在一张幻灯片一张幻灯片的过程中递归地更新图片

这可能吗

是否有一个picture属性,其中包含用于粘贴图片的路径和文件名

我不知道,但您可以使用Tags属性创建自己的:

您必须为每张幻灯片指定一个自定义标记,如:

Sub AssignTag()
    Dim sld as Slide
    Set sld = ActivePresentation.Slides(1)
    sld.Tags.Add "img_location", "C:\files\image1.JPG"

End Sub
配置幻灯片的标签后,您可以执行以下操作从该位置进行更新:

Sub UpdateJPGs()
    Dim sld As Slide
    Dim path As String

    For Each sld In ActivePresentation.Slides
        path = sld.Tags("img_location")
        If Not path = vbNullString Then
            On Error Resume Next
            sld.Background.Fill.UserPicture path
            If Err Then
                MsgBox "Unable to update slide #" & sld.SlideNumber
                Err.Clear
            End If
            On Error GoTo 0
        End If
    Next
End Sub

这非常巧妙,我不知道你可以添加自己的标记,非常感谢David。你也可以向每张幻灯片添加CustomXML,如果你需要存储每张幻灯片的大量信息,我建议你这样做。但是它更难实现,因此简单的标记应该可以实现这一目的。干杯,如果这解决了问题,请将答案标记为接受。我想我首先必须浏览整个演示文稿并指定所有背景JPEG路径,因为每张幻灯片的路径都不同,对吗?但是在那之后,我可以运行UpdateJPGS子例程,它应该可以完成所有的工作。是的,一旦它们最初被分配,您应该能够运行UpdateJPGS子例程来更新它们。CustomXML还有另一个缺点:它无法从XML转换为早期的二进制格式。而fwiw,我早在97年就测试过将大量数据作为标记进行附加,发现一兆字节的标记数据除了增加文件大小之外没有其他问题。在这种情况下,最好在每个标签中存储大量的数据,而不是在很多标签中存储大量的小数据。如果我的答案帮助你解决这个问题,请考虑接受或旋转它,这样其他人也可以从中受益。干杯