Это определенно возможно, и довольно весело :-)
Моя первая рекомендация — создать шаблон PowerPoint, используя основные виды, с заполнителями и заголовками, готовыми к работе. Затем запустите следующий макрос PowerPoint, чтобы получить имя и индекс/идентификатор для каждой фигуры на странице.
Sub nameshapes()
Dim sld As Slide
Dim shp As Shape
Set sld = Application.ActivePresentation.Slides(1)
For Each shp In sld.Shapes
shp.TextEffect.Text = shp.name & " " & shp.ID
Next
End Sub
Это быстрый и грязный фрагмент кода, который помещает индекс и имя каждого элемента на странице вашего шаблона в саму форму. Запомните, запишите их. Это ваши ориентиры для того, куда вы хотите, чтобы что-то пошло. Я не собираюсь рассказывать об основах зацикливания и т. д., но расскажу о ключевых фрагментах кода.
1) Откройте и получите контроль над Power Point из Excel.
Set ppt = CreateObject("PowerPoint.Application")
ppt.Visible = True
Set myPPT = ppt.Presentations.add
myPPT.ApplyTemplate ("Your template here.potx")
Затем я добавляю все страницы, которые мне понадобятся (это может варьироваться в зависимости от вашего приложения, количества строк и того, делаете ли вы это в начале или в процессе, будет зависеть от того, сопоставили ли вы, какую страницу вы следует поместить данные в ваши данные)
For x = 1 To NumberOfPages
myPPT.Slides.AddSlide x, myPPT.SlideMaster.CustomLayouts(2) '2 is the index of the template I wish to use (in master views, the index is the order they're in (starting from 1)
Next
Я предполагаю, что вы знаете, какую страницу вы хотите обновить в каждой строке, поэтому:
For Each dr In .rows 'I'm storing my data in a special collection, you will need to adapt this
Set currSlide = myPPT.Slides(dr.cell("OutputPage").Value) 'go to the right page
Sheets(dr.cell("SheetName").toString).Activate 'make sure the data you want is active
ActiveSheet.Range(Names(dr.cell("ChartID").Value)).CopyPicture 'copy the table as a picture, this is easiest for formatting in powerpoint, but you can do lots of things here
currSlide.Select
currSlide.Shapes("Content Placeholder " & dr.cell("Output Position").toString).Select 'the output position is the index from the first bit of code,
ppt.ActiveWindow.View.Paste
next
Теперь ваше приложение определенно будет отличаться от этого, но я надеюсь, что все основные потребности есть, и это должно быть хорошей отправной точкой.
person
RowanC
schedule
08.08.2013