Вставка специальной таблицы Excel в слайд-заполнитель PowerPoint VBA - PullRequest
0 голосов
/ 02 февраля 2020

Извините, что публикую еще один PasteSpecial-вопрос, но я не нашел что-то, что точно относится к тому, что я пытаюсь сделать.

У меня есть некоторый код VBA:

For Each Workbook In Workbooks

For Each Sheet In Workbook.Sheets

running_pp_app.ActivePresentation.Slides.Add running_pp_app.ActivePresentation.Slides.Count + 1, ppLayoutTitleOnly
Sheet.Range("a1:b2").Copy
running_pp_app.ActivePresentation.Slides(running_pp_app.ActivePresentation.Slides.Count).Shapes.PasteSpecial DataType:=ppPasteDefault, link:=msoCTrue

Next Sheet
Next Workbook

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

В конечном счете, моя цель состоит в том, чтобы иметь возможность легко контролировать все вставленные диапазоны / фигуры с помощью мастер-макетов (через пользовательский интерфейс после мой VBA работает). Я не знаю, как вставить связанный объект OLE в слайд, чтобы он занимал позицию заполнителя - например, это «контент» в мастер-макете «Заголовок и контент».

Как я могу это сделать?

Вся помощь приветствуется. Спасибо.

1 Ответ

0 голосов
/ 04 февраля 2020

Моей первой мыслью было, что это невозможно. Это работает для вставки в заполнитель:

Sub PasteIntoPlaceholder()
    ActivePresentation.Slides(1).Shapes(2).Select
    ActiveWindow.View.PasteSpecial DataType:=ppPasteDefault
End Sub

Но как только вы добавите параметр ссылки, он будет вставлен в виде отдельной фигуры, а не в заполнитель.

Это в основном соответствует аналогичным действиям в пользовательском интерфейсе. Прямая вставка на слайд с выбранным заполнителем вставит диаграмму, как и ожидалось, но Специальная вставка не будет.

Редакция:

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

Sub PasteIntoPlaceholder()
    With ActiveWindow
        .View.PasteSpecial DataType:=ppPasteDefault, Link:=msoCTrue
        .Selection.Cut
        ActivePresentation.Slides(1).Shapes(2).Select
        .View.Paste
    End With
End Sub
...