Я новый пользователь stackoverflow, поэтому я не уверен, правильно ли я это делаю, но я пытаюсь опубликовать вопрос о ранее заданном решении от Стива Риндсберга .У меня недостаточно репутации, чтобы комментировать, и, похоже, нет способа отправить сообщение другому пользователю напрямую, поэтому я публикую новый вопрос здесь.
Не могу получитькод ниже, чтобы работать.Я использую PowerPoint O365 версии 1901, и у меня есть два типа фигур, которые я пытаюсь преобразовать, msoChart и msoLinkedOLEObject (некоторые листы Excel).Первоначально я изменил ppPasteEnhancedMetafile на ppPastePNG, потому что я хочу PNG, но он не работает ни с одним из них.
Вот код:
Sub ConvertAllShapesToPic()
Dim oSl As Slide
Dim oSh As Shape
For Each oSl In ActivePresentation.Slides
For Each oSh In oSl.Shapes
' modify the following depending on what you want to
' convert
Select Case oSh.Type
Case msoChart, msoEmbeddedOLEObject, msoLinkedOLEObject
ConvertShapeToPic oSh
Case msoPlaceholder
If oSh.PlaceholderFormat.ContainedType = msoEmbeddedOLEObject _
Or oSh.PlaceholderFormat.ContainedType = msoLinkedOLEObject _
Or oSh.PlaceholderFormat.ContainedType = msoChart _
Then
ConvertShapeToPic oSh
End If
Case Else
End Select
Next
Next
End Sub
Sub ConvertShapeToPic(ByRef oSh As Shape)
Dim oNewSh As Shape
Dim oSl As Slide
Set oSl = oSh.Parent
oSh.Copy
Set oNewSh = oSl.Shapes.PasteSpecial(ppPastePNG)(1)
With oNewSh
.Left = oSh.Left
.Top = oSh.Top
Do
.ZOrder (msoSendBackward)
Loop Until .ZOrderPosition < oSh.ZOrderPosition
End With
oSh.Delete
End Sub
Я заметил, что я запускаю ConvertAllShapesToPic из ссылки / действия в SlideРежим показа, он не завершается и не работает тихо.Если я добавляю командную кнопку (элемент управления ActiveX) и запускаю ее оттуда, я получаю следующее:
Ошибка времени выполнения '-2147188160 (80048240)':
Shapes (неизвестный член):Неверный запрос.Указанный тип данных недоступен.
Ошибка при установке. Set oNewSh = sld.Shapes.PasteSpecial (ppPastePNG) (1).После ошибки, если я возвращаюсь к слайду и Ctrl-V, я получаю изображение, поэтому я знаю, что оно работает до этого момента.
Я пробовал различные решения, которые я нашел в Интернете для этого, такие как добавлениеDoEvents или ActiveWindow.Panes (1). Активировать после копирования, но, похоже, это не имеет значения.Есть предложения?
Спасибо