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

时间:2018-10-18 01:40:23

标签: vba powerpoint

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

我尝试手动复制并重新粘贴为图像(如图片),然后发送PowerPoint,此方法有效,并且保留了图像中的内容和日期设置。

当我有32个PowerPoint时,如何以编程方式执行此操作?

2 个答案:

答案 0 :(得分:2)

这是一个有趣的挑战!

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,它将使用链接的依据,但选择将图片与文档一起保存为msoPicture。新图片放置在同一位置,并缩放以匹配当前图片。最后,由于图片的“旧”链接版本已被替换,因此它将删除。


使用AddLinkedPicture宏将链接的图片添加到活动幻灯片中,然后使用第二个宏ShapeTypeDebug来确保添加的图片具有正确的类型{{ 1}}。

您可以使用msoLinkedPicture宏来检查当前幻灯片上的任何形状是否为图片。我在运行ShapeTypeDebug宏之前和之后使用此命令,以确保图片已正确地“转换”。

CopyPictures

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

答案 1 :(得分:1)

对于分发演示文稿,我认为您可能已经拥有最好的解决方案,但这是在某些情况下有用的另一种解决方案。

PowerPoint几乎总是会创建全路径链接,但是如果链接仅指向文件名而不是路径,它将(通常)与PPT / PPTX本身在同一文件夹中查找图像。

因此,如果您愿意分发链接的图像以及PowerPoint文件,并且可以使收件人将它们全部放到一个文件夹中,那么您要做的就是将链接的图片的.LinkFormat.SourceFullName设置为just原始图像文件名,无路径。

很显然,这并不是那么容易分发,但是由于它只改变链接的图片而不改变链接路径,因此它保留了可能应用于图像的任何动画,替代文本,标签或其他不寻常的格式设置。

另一个(也许是最简单的)技巧是在插入图像时选择“链接和嵌入”,而不仅仅是“链接”。然后,当磁盘上的原始图像更改时,PPT将更新演示文稿中的图像,但是如果链接断开,则使用嵌入的副本。