Кажется, это проблема синхронизации.Это кусает некоторых людей / некоторые компьютеры, а не другие.Вы вставляете фигуру, а затем пытаетесь что-то с ней сделать, пока 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