Это был веселый вызов!
Макрос 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
использовался для добавления связанной картинки на мой активный слайд, а затем я использовалвторой макрос, ShapeTypeDebug
, чтобы убедиться, что картинка, которую я добавил, имела правильный тип, msoLinkedPicture
.
Вы можете использовать макрос ShapeTypeDebug
, чтобы проверить, является ли какая-либо из фигур на текущем слайде изображением.Я использовал это до и после запуска макроса 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, мой метод потеряет это редактирование.