Как я могу скопировать изображение из Excel в форму PPT? - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь этот код, чтобы скопировать из Excel в ppt:

  Dim presentation As Object
  Set ppt = CreateObject("PowerPoint.Application")
  Set presentation = ppt.Presentations.Open2007("D:\temp.pptx", MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoTrue)

 Dim oSlide As Object        
 Set oSlide = presentation.Slides(7)
 Dim oSheet As Worksheet
 Set oSheet = ThisWorkbook.Sheets(2)
 Dim oImageOb As Object
 Set oImageOb = oSheet.Shapes(1)
 oImageOb.Copy

 oSlide.Shapes.PasteSpecial DataType:=2

Но PPT завершается после выполнения PasteSpecial.

Как я могу скопировать изображение из Excel в форму PPT?

Ответы [ 3 ]

1 голос
/ 16 мая 2019

Кажется, это проблема синхронизации.Это кусает некоторых людей / некоторые компьютеры, а не другие.Вы вставляете фигуру, а затем пытаетесь что-то с ней сделать, пока PPT все еще обрабатывает запрос, поэтому часть «сделать что-то с этим» не выполняется.

Обычный обходной путь - дать ему немного дополнительного времени и попробовать еще несколько раз:

В разделе объявлений вашего модуля включите это:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Это для 32-битной PowerPoint;заставить его работать в 64-битном PPT или в обоих случаях возможно, но тема для другого потока.

Затем в той части вашего сабвуфера, которая вставляет фигуру, попробуйте несколько раз вставить с паузой между каждымпопробуйте:

Dim oShp as Shape
Dim x as Long

On Error Resume Next

For x = 1 to 3 ' or whatever number you want to try
  Set oShp = oSlide.Shapes.PasteSpecial DataType:=2
  Sleep(1000)  ' Adjust this as needed
  If Not oShp is Nothing Then
    Exit For
  End If
Next

If oShp is Nothing Then
  ' It didn't work.
  ' Do whatever you need to do to recover
End If

On Error GoTo YourRegularErrorHandler
' Which you should add
1 голос
/ 16 мая 2019

Чтобы вставить изображение в указанную форму в PowerPoint, есть несколько предостережений:

  1. Форма должна быть такого типа, который допускает изображения, такие как определенныезаполнители контента.Вы не можете вставлять изображения в текстовые поля, заполнители диаграмм и т. Д.
  2. Форма должна быть Select ed.Хотя мы привыкли говорить людям , избегайте использования Select или Activate в Excel VBA , однако в PowerPoint и Word некоторые действия можно выполнять только тогда, когда объект находится в поле зрения и / или выбран,Чтобы Select форма, нам нужно Select слайд.

Я очистил вашу процедуру, переместив объявления переменных вверх, и изменил индексы пути / слайдаи т. д. Я создал новую переменную pptShape, которую мы будем использовать для обработки конкретного экземпляра формы на слайде.

Обратите внимание, что я изменил траекторию и индексы слайда / формы.

Option Explicit

Sub foo()
Dim ppt As Object 'PowerPoint.Application
Dim oSlide As Object 'PowerPoint.Slide
Dim pptShape As Object 'PowerPoint.Shape
Dim oImageOb As Object
Dim oSheet As Worksheet
Dim pres As Object 'PowerPoint.Presentation

Set ppt = CreateObject("PowerPoint.Application")
Set pres = ppt.Presentations.Open2007("c:\debug\empty ppt.pptx", MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoTrue)
Set oSlide = pres.Slides(3)

Set oSheet = ThisWorkbook.Sheets(1)  ' ## MODIFY AS NEEDED
Set oImageOb = oSheet.Shapes(1)      ' ## MODIFY AS NEEDED
oImageOb.Copy

Set pptShape = oSlide.Shapes(1)      ' ## MODIFY AS NEEDED

'## to preserve aspect ratio and prevent stretching/skewing image:
pptShape.Width = oImageOb.Width
pptShape.Height = oImageOb.Height

' ## Select the slide
oSlide.Select
' ## Selct the shape
' ## NOTE: This shape MUST be of a type that contains a picture frame, otherwise
'          an error will occur
pptShape.Select

' ## All of the following methods work for me:
'ppt.CommandBars.ExecuteMso "PasteJpeg"
'ppt.CommandBars.ExecuteMso "PasteBitmap"
'ppt.CommandBars.ExecuteMso "PasteAsPicture"
ppt.CommandBars.ExecuteMso "Paste"


End Sub

Вот мой лист Excel с изображением:

enter image description here

И выводим слайд с изображением, вставленным в соответствующий заполнитель изображения:

enter image description here

1 голос
/ 16 мая 2019

Не уверен, если это что-то меняет, но я хотел бы явно указать, какой тип объекта я имею в виду при использовании VBA из Excel в PowerPoint:

Dim presentation As PowerPoint.Presentation
Set ppt = New PowerPoint.Application
Set presentation = ppt.Presentations.Open2007("D:\temp.pptx", MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoTrue)

Dim oSlide As Object        
Set oSlide = presentation.Slides(7)
Dim oSheet As Worksheet
Set oSheet = ThisWorkbook.Sheets(2)
Dim oImageOb As Object
Set oImageOb = oSheet.Shapes(1)
oImageOb.Copy

oSlide.Shapes.PasteSpecial DataType:=ppPasteEnhancedMetafile

Этот код отлично работает для меня (просто замениврасположение PPT-файла, конечно).И под «работами» я подразумеваю, что рисунок / изображение / форма копируются из Excel в PowerPoint без последующего закрытия PowerPoint

...