Vba 共享文件时保留链接图像的Powerpoint代码
在我的Powerpoint中,有链接到文件夹的图像。我需要将此发送给无权访问该文件夹的用户。我需要图像来保留当前内容 我曾尝试手动复制并重新粘贴为图片形式的图像,然后发送PowerPoint,这样做有效,并保留了图像中的内容和日期设置Vba 共享文件时保留链接图像的Powerpoint代码,vba,powerpoint,Vba,Powerpoint,在我的Powerpoint中,有链接到文件夹的图像。我需要将此发送给无权访问该文件夹的用户。我需要图像来保留当前内容 我曾尝试手动复制并重新粘贴为图片形式的图像,然后发送PowerPoint,这样做有效,并保留了图像中的内容和日期设置 我有32个PowerPoints,如何通过编程实现这一点 这是一个有趣的挑战 CopyPictures宏实际上是您需要的唯一宏,但我包含了另外两个用于设置和调试整个情况的宏 Option Explicit Sub CopyPictures() Dim
我有32个PowerPoints,如何通过编程实现这一点 这是一个有趣的挑战 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中,而是选择将图片作为msoPicture与文档一起保存!新图片放置在同一位置,并缩放以匹配当前图片。最后,它删除了图片的“旧”链接版本,因为它已经被替换
AddLinkedPicture宏用于将链接图片添加到我的活动幻灯片中,然后我使用第二个宏ShapeTypedBug来确保我添加的图片具有正确的类型msoLinkedPicture
您可以使用ShapeTypedBug宏检查当前幻灯片上的任何形状是否为图片。我在运行CopyPictures宏之前和之后都使用了此选项,以确保图片已正确“转换”
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中对其进行了其他编辑,我的方法将丢失该编辑 这是一个有趣的挑战 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中,而是选择将图片作为msoPicture与文档一起保存!新图片放置在同一位置,并缩放以匹配当前图片。最后,它删除了图片的“旧”链接版本,因为它已经被替换
AddLinkedPicture宏用于将链接图片添加到我的活动幻灯片中,然后我使用第二个宏ShapeTypedBug来确保我添加的图片具有正确的类型msoLinkedPicture
您可以使用ShapeTypedBug宏检查当前幻灯片上的任何形状是否为图片。我在运行CopyPictures宏之前和之后都使用了此选项,以确保图片已正确“转换”
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几乎总是创建完全路径链接,但如果链接仅指向文件名,而没有路径,则它通常会在与PPT/PPTX本身相同的文件夹中查找图像 因此,如果您愿意分发链接的图像和PowerPoint文件,并且可以让收件人将它们全部放在一个文件夹中,则只需将链接图片的.LinkFormat.SourceFullName设置为原始图像文件名sans path即可 显然,这不会像分发一样简单,但因为它只更改链接路径,而不会更改图片的任何内容,因此它保留了可能应用于图像的任何动画、alt文本、标记或其他异常格式设置
另一个可能是最简单的技巧是在插入图像时选择链接和嵌入,而不仅仅是链接。当磁盘上的原始图像发生变化时,PPT将更新演示文稿中的图像,但如果链接断开,则使用嵌入的副本。对于分发演示文稿,我认为您可能已经有了最好的解决方案,但在某些情况下,还有一个解决方案会很有用 PowerPoint几乎总是创建完全路径链接,但如果链接仅指向文件名,而没有路径,则它通常会在与PPT/PPTX本身相同的文件夹中查找图像 因此,如果您愿意分发链接的图像和PowerPoint文件,并且可以让收件人将它们全部放在一个文件夹中,则只需将链接图片的.LinkFormat.SourceFullName设置为原始图像文件名sans path即可 显然,这不会像分发一样简单,但因为它不会改变pict 但在链接路径中,它保留了可能应用于图像的任何动画、alt文本、标记或其他异常格式设置
另一个可能是最简单的技巧是在插入图像时选择链接和嵌入,而不仅仅是链接。当磁盘上的原始图像发生变化时,PPT将更新演示文稿中的图像,但如果链接断开,PPT将使用嵌入的副本。非常感谢。快到了!唯一不太有效的是>>新图片被放置在同一位置,并被缩放以匹配当前图片。>>照片的位置移动了,我不得不手动缩放。有什么想法吗?@Camille你多久前拿到密码的?大约30分钟前,我对它做了一个小小的更新,因为我已经向后完成了其中的一部分:| Excellent@Marcucciboy2我一直在考虑类似这样的“Shape.LinkFormat.SourceFullName”搜索分散在目录中的不同链接ole对象,以将它们保存在单个合并目录中。非常感谢。快到了!唯一不太有效的是>>新图片被放置在同一位置,并被缩放以匹配当前图片。>>照片的位置移动了,我不得不手动缩放。有什么想法吗?@Camille你多久前拿到密码的?大约30分钟前,我对它做了一个小小的更新,因为我已经向后完成了其中的一部分:| Excellent@Marcucciboy2我一直在考虑类似这样的“Shape.LinkFormat.SourceFullName”搜索分散在目录中的不同链接ole对象,将它们保存在单个合并目录中。