Скопировать таблицу Excel в Powerpoint возвращает ошибку времени выполнения «13» - PullRequest
1 голос
/ 02 ноября 2011

Я действительно борюсь с этим, я, похоже, не могу найти причину, по которой мой код не работает:

Dim i1 As Integer
Dim PPapp As Object, XLapp As Object
Dim slide1 As Slide, slide2 As Slide, slide3 As Slide
Dim PPoutput As Presentation
Dim output_table As ShapeRange
Set PPapp = New PowerPoint.Application
Set XLapp = Excel.Application
Set PPoutput = PPapp.Presentations.Open("Q:\SDPMaler\blank.potx", untitled:=msoTrue, withwindow:=msoTrue)
Set slide1 = ppoutput.Slides.AddSlide(1, ppoutput.SlideMaster.CustomLayouts(13))
XLapp.ActiveWorkbook.Sheets("PPT output").Range("y4:ae11").Copy
Set output_table = slide1.Shapes.PasteSpecial(ppPasteJPG, msoFalse, "", 1, "", msoTrue)

И здесь мой код не работает: макрос создает powerpoint, добавляетслайд в правильном макете и даже вставляет таблицу, как изображение

.PasteSpecial(DataType:=ppPasteOLEObject, link:=msoTrue)

работает так же, но с любым из них я получаю «Ошибка времени выполнения 13: несоответствие типов» в последней строкевставил код.Несмотря на то, что № 13, как правило, легко исправить, я действительно застрял на этот раз.Надеюсь, кто-нибудь может мне помочь Спасибо PS: я использую Office 2010 и запускаю макрос в Excel

Ответы [ 2 ]

1 голос
/ 02 ноября 2011

Мое предположение:

Измените это:

Dim output_table As ShapeRange

Кому:

Dim output_table As PowerPoint.ShapeRange

при условии, что вы установили ссылку на PowerPoint или

Dim output_table As Object

, если вы используете позднюю привязку

Уменьшая ее как ShapeRange в Excel, вывы создаете переменную для хранения диапазона формы Excel, но при вставке в PPT вы получаете диапазон формы PowerPoint, что приведет к несоответствию типов.

0 голосов
/ 02 ноября 2011

Я предполагаю, что функция .PasteSpecial не возвращает ShapeRange, поэтому при попытке присвоить результат .PasteSpecial переменной (output_table), объявленной как объект ShapeRange, вы получаете несоответствие типов.

Попробуйте Dim output_table в качестве Variant, а затем отладьте его, посмотрев на TypeName (output_table) - если вам даже НУЖЕН результат PasteSpecial.

...