![]() |
#1
|
|||
|
|||
![]() I am looking for help with PowerPoint 2007 and using activex to help me create a PowerPoint that uses a special *.POT theme file as its base. More specifically, I am calling the COM object from Matlab. Here is the code outline: Code:
h = actxserver('PowerPoint.Application') h.Visible = 1; Presentation = h.Presentation.Add blankSlide = Presentation.SlideMaster.CustomLayouts.Item(7) Slide1 = Presentation.Slides.AddSlide(1,blankSlide) Slide2 = Presentation.Slides.AddSlide(1,blankSlide); figure; plot(1:10) print('-dpng','-r150','c:\temp\test1.png') figure; image(ceil(64*rand(20,20))) print('-dpng','-r150','c:\temp\test2.png') Image1 = Slide1.Shapes.AddPicture('c:\temp\test1.png','msoFalse','msoTrue',100,20,500,500) Image2 = Slide2.Shapes.AddPicture('c:\temp\test2.png','msoFalse','msoTrue',100,20,500,500) Title1 = Slide1.Shapes.AddTextbox('msoTextOrientationHorizontal',200,10,400,70) Title1.TextFrame.TextRange.Text = 'plot(1:10)' Title2 = Slide2.Shapes.AddTextbox('msoTextOrientationHorizontal',200,10,400,70) Title2.TextFrame.TextRange.Text = 'image(ceil(64*rand(20,20)))' Instead of making blank slides, I was hoping I could use a specific .POT file as the base of the slides and go from there. I would eventually need to place text and images at very precise locations---so hopefully this can even be done with PowerPoint activex. I already have a VBA Macro that does a lot of what I need, but it bases all its work on a premade *.PPTM file. So with activex, I am hoping it will do everything my Macro does, along with create the PowerPoint based on a theme/.POT file, and replace certain text within the template. Below is the Marco code--- it will be my general guideline for writing the activex. What this code doesn't include is replacing placeholder texts (I currently do that manually). Code:
Sub GetImagesFromDir() Dim fd As FileDialog Set fd = Application.FileDialog(msoFileDialogFolderPicker) Dim imageDir As Variant Dim tempFileName As String Dim tempFileNum As String Dim tempStr As String Dim varFiles() As Variant Dim lngFileCount As Long Dim newSlide As Long Dim newImage As Shape Dim newTextBox As Shape With fd If .Show = -1 Then For Each SelectedItems In .SelectedItems newSlide = -1 imageDir = SelectedItems tempFileName = Dir(imageDir & "\*.*", vbNormal) Do Until Len(tempFileName) = 0 If (tempFileName <> ".") And (tempFileName <> "..") Then tempFileNum = Left(tempFileName, 15) tempFileNum = Right(tempFileNum, 5) For i = 1 To ActivePresentation.Slides.Count For j = 1 To ActivePresentation.Slides(i).Shapes.Count If (ActivePresentation.Slides(i).Shapes(j).HasTextFrame) Then If (ActivePresentation.Slides(i).Shapes(j).TextFrame.HasText) Then tempStr = ActivePresentation.Slides(i).Shapes(j).TextFrame.TextRange tempStr = Right(tempStr, 5) If (StrComp(tempStr, tempFileNum, vbTextCompare) = 0) Then 'With ActivePresentation.Slides(i).Shapes.AddShape(Type:=msoShapeRectangle, Left:=0, Top:=0, Width:=100, Height:=100) With ActivePresentation.Slides(i) .Select 'Set newTextBox = .Shapes().AddTextbox(msoTextOrientationHorizontal, Left:=0, Top:=0, Width:=100, Height:=100) 'newTextBox.TextFrame.TextRange.Text = "Hello" Set newImage = .Shapes().AddPicture(tempFileName, msoFalse, msoTrue, 0, 0) newImage.LockAspectRatio = msoTrue newImage.Height = 440 newImage.Left = (ActivePresentation.PageSetup.SlideWidth - newImage.Width) / 2 + 5 newImage.Top = (ActivePresentation.PageSetup.SlideHeight - newImage.Height) / 2 + 38 newSlide = 1 End With End If End If End If Next j Next i If (newSlide = -1) Then ActivePresentation.Slides.Add Index:=ActivePresentation.Slides.Count + 1, Layout:=ppLayoutTitleOnly With ActivePresentation.Slides(ActivePresentation.Slides.Count).Shapes.AddTextbox(msoTextOrientationHorizontal, 712, 60, 200, 50) .TextFrame.TextRange.Text = tempFileNum With .TextFrame.TextRange.Font .Size = 8 .Name = "Arial" End With End With With ActivePresentation.Slides(ActivePresentation.Slides.Count) Set newImage = .Shapes().AddPicture(tempFileName, msoFalse, msoTrue, 0, 0) newImage.LockAspectRatio = msoTrue newImage.Height = 440 newImage.Left = (ActivePresentation.PageSetup.SlideWidth - newImage.Width) / 2 + 15 newImage.Top = (ActivePresentation.PageSetup.SlideHeight - newImage.Height) / 2 + 30 newSlide = -1 End With newSlide = -1 End If End If tempFileName = Dir Loop Next SelectedItems End If End With End Sub |
#2
|
|||
|
|||
![]()
I was able to find out how to edit the title text:
Code:
>> Slide.s2.Shapes.get Application: [1x1 Interface.Microsoft_PowerPoint_12.0_Object_Library._Application] Creator: 1.3479e+009 Parent: [1x1 Interface.Microsoft_PowerPoint_12.0_Object_Library._Slide] Count: 4 HasTitle: 'msoTrue' Title: [1x1 Interface.Microsoft_PowerPoint_12.0_Object_Library.Shape] Placeholders: [1x1 Interface.Microsoft_PowerPoint_12.0_Object_Library.Placeholders] How do I access them? |
![]() |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
How to insert a hyperlink in activex textbox | Joe Patrick | Word VBA | 1 | 10-03-2011 06:03 AM |
PowerPoint 2007 --> PowerPoint 2003 Webpage? | josephsh | PowerPoint | 0 | 06-09-2011 11:22 PM |
ActiveX controls inserted on a template do not function well | ged | Word | 0 | 10-21-2010 04:53 AM |
Powerpoint and Activex | kartlee | PowerPoint | 0 | 09-02-2010 06:48 AM |
ActiveX | Cquinn | Outlook | 0 | 02-08-2006 06:22 PM |