共享文件时保留链接图像的 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 损坏,则使用嵌入副本。
在我的 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 损坏,则使用嵌入副本。