2012-04-23 2 views
3

Мне нужно вставить несколько диаграмм из excel в powerpoint. Я нашел отличный код VBA (в основном на сайте Джона Пельтье). Теперь мой шаблон powerpoint имеет несколько макетов (например, с 1 диаграммой, занимающей большую часть слайдов или 1 диаграмму и одно текстовое поле на слайде и т. Д. И т. Д.).Вставьте диаграмму из Excel в конкретный заполнитель в определенном макете. Powepoint 2010

Я хочу, чтобы диаграмма стала частью макета слайда, так что если я переформатирую слайд - например, Я меняю макет, как в приведенном выше примере - график будет двигаться соответственно. В настоящее время я могу вставить в место, где находится местозаполнитель, с правильным размером и всем, но он не находится в заполнитель, он находится на заполнитель (и поэтому он остается там, если я меняю макет).

В идеале я хотел бы иметь возможность выбрать макет (с 15) и выбрать местозаполнитель в выбранном макете (как правило, у меня есть заголовок, нижний колонтитул, а затем от 1 до 4 заполнителей для диаграмм, изображений, текста или все, что выше).

Я не программист VBA, я просто использую немного логики и кодов захвата, которые любезно передаются в сети. Я не знаю, как определить правильную компоновку (у них есть имена, но это переменная?), Ни надлежащий заполнитель в макете (здесь я даже не знаю, как их идентифицировать).

Любая помощь очень ценится. DF

В следующем коде, который я копировал здесь и там (в основном, сайт Джона Пельтье).

Sub ChartToPresentation() 
' Set a VBE reference to Microsoft PowerPoint Object Library 

Dim PPApp As PowerPoint.Application 
Dim PPPres As PowerPoint.Presentation 
Dim PPSlide As PowerPoint.Slide 
Dim AddSlidesToEnd As Boolean 

AddSlidesToEnd = True 

' Make sure a chart is selected 
If ActiveChart Is Nothing Then 
    MsgBox "Please select a chart and try again.", vbExclamation, _ 
    "No Chart Selected" 
Else 
' Reference existing instance of PowerPoint 
Set PPApp = GetObject(, "Powerpoint.Application") 
' Reference active presentation 
Set PPPres = PPApp.ActivePresentation 
PPApp.ActiveWindow.ViewType = ppViewSlide 
' Reference active slide 
Set PPSlide = PPPres.Slides _ 
(PPApp.ActiveWindow.Selection.SlideRange.SlideIndex) 

' Copy chart 
ActiveChart.ChartArea.Copy 

' Paste chart 
PPSlide.Shapes.Paste.Select 

' Position pasted chart 
' This is the keypoint 
' I want to replace this with the selection of appropriate layout 
' and placeholder in that layout 
PPApp.ActiveWindow.Selection.ShapeRange.Left = 19.56 
PPApp.ActiveWindow.Selection.ShapeRange.Top = 66.33 
PPApp.ActiveWindow.Selection.ShapeRange.Width = 366.8 
PPApp.ActiveWindow.Selection.ShapeRange.Height = 424.62 


If PPApp.ActivePresentation.Slides.Count = 0 Then 

' Other key point 
' can I add a specific layout, for example one named Two Content Layout + takeout 
Set PPSlide = PPApp.ActivePresentation.Slides.Add(1, ppLayoutBlank) 
Else 
    If AddSlidesToEnd Then 
     'Appends slides to end of presentation and makes last slide active 
     PPApp.ActivePresentation.Slides.Add PPApp.ActivePresentation.Slides.Count + 1, ppLayoutBlank 
     PPApp.ActiveWindow.View.GotoSlide PPApp.ActivePresentation.Slides.Count 
     Set PPSlide = PPApp.ActivePresentation.Slides(PPApp.ActivePresentation.Slides.Count) 
    Else 
     'Sets current slide to active slide 
     Set PPSlide = PPApp.ActiveWindow.View.Slide 
    End If 
End If 


'Clean up 
Set PPSlide = Nothing 
Set PPPres = Nothing 
Set PPApp = Nothing 


End If 

End Sub 
+0

Все проблемы являются локальными для тех, кто нуждается в их решении и не имеет значение для тех, кто этого не делает. Я тоже хотел бы знать ответ на этот вопрос, уже потратив немного времени, пытаясь понять это. Спасибо, Сиддхарт, за исправление. FWIW, я попробовал в основном то же самое, выбрав перед вставкой, но сделал прямую пасту, а не пастовую. Не работает.

ответ

6

Если я понял вашу проблему, то я думаю, что это то, что вы хотите.

В настоящее время вы вставляете схему "" Slide 1. Вы должны вставить его «В» соответствует Place Holder в Slide 1.

Изменить код, чтобы включить это (испытанный)

Dim nPlcHolder As Long 

With PPPres 
    nPlcHolder = 2 '<~~ The place holder where you have to paste 

    .Slides(1).Shapes.Placeholders(nPlcHolder).Select msoTrue 
    .Windows(1).View.PasteSpecial (ppPasteMetafilePicture) 
End With 

Теперь, даже если вы измените макет, диаграммы будут двигаться соответственно.

СНАПШОТ

enter image description here НТН

+0

БОЛЬШОЕ спасибо Сиддхарту, вы прибили его. DF – user1351484

+0

Рад, что это помогло :) –

 Смежные вопросы

  • Нет связанных вопросов^_^