共享文件时保留链接图像的 Powerpoint 代码

Powerpoint Code to Retain Linked Images When Sharing File

在我的 Powerpoint 中有链接到文件夹的图像。我需要将其发送给无权访问该文件夹的用户。我需要图像来保留当前内容。

我尝试过手动复制并重新粘贴为图像 AS PICTURE,然后发送 PowerPoint,这有效并且保留了图像中的内容和日期设置。

我有 32 个 PowerPoint 演示文稿,如何以编程方式执行此操作?

这是一项有趣的挑战!

CopyPictures 宏实际上是您唯一需要的宏,但我包括了另外两个用于设置和调试整个情况的宏。

Option Explicit

Sub CopyPictures()

    Dim currentSlide As Slide
    For Each currentSlide In ActivePresentation.Slides

        Dim currentShape As Shape
        For Each currentShape In currentSlide.Shapes

            If currentShape.Type = msoLinkedPicture Then

                'https://docs.microsoft.com/en-us/office/vba/api/powerpoint.shapes.addpicture
                currentSlide.Shapes.AddPicture _
                    currentShape.LinkFormat.SourceFullName, _
                    msoFalse, msoTrue, _
                    currentShape.Left, currentShape.Top, _
                    currentShape.Width, currentShape.Height

                currentShape.Delete

            End If

        Next currentShape

    Next currentSlide

End Sub

CopyPictures 宏循环遍历 powerpoint 的每张幻灯片中的每个形状,并表示如果它正在检查的当前形状具有类型 msoLinkedPicture,它将简单地将该图片重新添加到 powerpoint使用它所基于的 link 而是选择将图片 文档保存为 msoPicture!新图片放置在同一位置并缩放以匹配当前图片。最后,它删除了图片的 'old' linked 版本,因为它已经被替换了。


AddLinkedPicture 宏用于将 linked 图片添加到我的活动幻灯片,然后我使用第二个宏 ShapeTypeDebug 来确保我添加的图片有正确的类型,msoLinkedPicture

您可以使用 ShapeTypeDebug 宏来检查当前幻灯片上的任何形状是否为图片。我在 运行 CopyPictures 宏之前和之后使用它来确保图片正确 'converted'.

Sub AddLinkedPicture()

    'https://docs.microsoft.com/en-us/office/vba/api/powerpoint.shapes.addpicture
    ActiveWindow.View.Slide.Shapes.AddPicture "C:\Users\Public\Downloads\Untitled.png", msoTrue, msoFalse, 100, 100

End Sub

Sub ShapeTypeDebug()

    Dim currentShape As Shape
    For Each currentShape In ActiveWindow.View.Slide.Shapes

        'https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.core.msoshapetype?view=office-pia
        Select Case currentShape.Type
            Case 11
                MsgBox Chr(34) & currentShape.Name & Chr(34) & " is a msoLinkedPicture"
            Case 13
                MsgBox Chr(34) & currentShape.Name & Chr(34) & " is a msoPicture "
        End Select

    Next currentShape

End Sub

请注意,我使用的方法不会复制 当前 图片,因此如果您在 powerpoint 中对它进行了一些其他编辑,我的方法将丢失该编辑。

对于分发演示文稿,我认为您可能已经有了最好的解决方案,但这里还有一个在某些情况下会很有用的解决方案。

PowerPoint 几乎总是会创建完整路径的 link,但如果 link 只是文件名,没有路径,它(通常)会在同一文件夹中查找图像作为 PPT/PPTX 本身。

因此,如果您愿意分发 linked 图像和 PowerPoint 文件,并且可以让收件人将它们全部放在一个文件夹中,您需要做的就是设置 linked picture's .LinkFormat.SourceFullName to just the original image file name, sans path.

显然,这不会那么容易分发,但由于它除了改变 link 路径外没有改变图片,它会保留任何动画、替代文本、标签或您可能会使用的其他不寻常的格式设置已应用于图像。

另一个可能最简单的技巧是在插入图像时选择 Link & Embed 而不是 Link。当磁盘上的原始图像发生变化时,PPT 将更新演示文稿中的图像,但如果 link 损坏,则使用嵌入副本。