Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
DiscussionsAccessExcelInfoPathOutlookPowerPointPublisherWord
DirectoryUser Groups
Related Topics
Outlook ExpressInternet ExplorerWindowsMS Server ProductsMore Topics ...

MS Office Forum / General PowerPoint Questions / March 2008

Tip: Looking for answers? Try searching our database.

Name of Objects?

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
dR - 04 Mar 2008 00:33 GMT
How to refer to all the necessary objects with VBA from Excel?
After inserting new slide of Content layout, I need to:
1.  Click the chart icon
2.  Delete the default Datasheet
3.  Delete the default chart
4.  Resize the container to full page
5.  Paste my picture

All of the above should be done with explicit references to objects,
without any "Active..." or "Selection".

Thanks
dR
Steve Rindsberg - 04 Mar 2008 03:50 GMT
> How to refer to all the necessary objects with VBA from Excel?
> After inserting new slide of Content layout, I need to:
[quoted text clipped - 6 lines]
> All of the above should be done with explicit references to objects,
> without any "Active..." or "Selection".

What version of PPT?

-----------------------------------------
Steve Rindsberg, PPT MVP
PPT FAQ:  www.pptfaq.com
PPTools:  www.pptools.com
================================================
dR - 04 Mar 2008 23:54 GMT
> In article <5f1db989-4f62-4795-b345-2bda403b0...@i29g2000prf.googlegroups.com>,
>
[quoted text clipped - 17 lines]
> PPTools:  www.pptools.com
> ================================================

Office 2003
Steve Rindsberg - 05 Mar 2008 05:29 GMT
OK, 2003.  Good.

> > > How to refer to all the necessary objects with VBA from Excel?
> > > After inserting new slide of Content layout, I need to:
[quoted text clipped - 3 lines]
> > > 4.  Resize the container to full page
> > > 5.  Paste my picture

But I don't quite follow the logic here.  Is there already a chart on the slide?  

If you want to empty the content placeholder, you can delete it then reapply the
current layout.  That will give you a new empty content placeholder.

But I know of no way to paste a picture into the placeholder (other than manually)
Is it important that your picture be in a content placeholder?
Instead, can you just paste it onto the slide and size it to the full page?
That wouldn't be especially difficult

Assuming your have your picture on the clipboard something like this would do it.
You'd need to get a reference to the PPT app and replace
.ActivePresentation.Slides(3) with a reference to the slide you want to work with:

Dim oSh As Shape
Set oSh = ActivePresentation.Slides(3).Shapes.Paste(1)

With oSh
   ' if you want to fill the slide with the picture
   ' even if that distorts the picture, set
   ' LockAspectRatio = msoFalse; otherwise, msoTrue
   .LockAspectRatio = msoFalse
   .Left = 0
   .Top = 0
   .Height = ActivePresentation.PageSetup.SlideHeight
   .Width = ActivePresentation.PageSetup.SlideWidth
End With

> > > All of the above should be done with explicit references to objects,
> > > without any "Active..." or "Selection".
[quoted text clipped - 8 lines]
>
> Office 2003

-----------------------------------------
Steve Rindsberg, PPT MVP
PPT FAQ:  www.pptfaq.com
PPTools:  www.pptools.com
================================================
dR - 06 Mar 2008 20:23 GMT
> OK, 2003.  Good.
>
[quoted text clipped - 52 lines]
> PPTools:  www.pptools.com
> ================================================

Thanks Steve.

I copy the pictures onto new blank slides.
There is no need for the picture to be in a content placeholder.
There is a need to display the pictures in full size of slide (minus
some margin).

I went into the direction of chart content placeholder because when I
did manual trials, it produced the best results, unlike normal pasting
onto blank slide which produced inconsistent and unexpected results.

I always start with copy Excel range as picture (Shift+Edit), and
accept the defaults
(Appearance: As shown on screen, Format: Picture).

Paste
I tried four machines with same build of XP and Office 2003 sp2. On
two machines the output was OK, while on the other two, the picture
was cutoff. It happened even when I sized the xl range to the size of
the slide.This is very strange and I could not expect a solution for
it from a remote newsgroup member.
Pasting into chart content placeholder always produced good results,
and scaling was done automatically. This is the oly reason why I
explored that direction. However, you ruled out this option, because
there is no way to programmatically paste a picture into the
placeholder.

PasteSpecial (ppPasteEnhancedMetafile)
Using PasteSpecial solved the issue of truncated picture.
I used your tips to modify my code. I list below the relevant portions
of it, for the benefit of other users.
It now maximizes the picture without distortion, and centers it
horizontally.

I still have 2 puzzles:
1.  You had:
   Dim oSh As Shape
   Set oSh = ActivePresentation.Slides(3).Shapes.Paste(1)
And it works
In my implementation, I had a Type Mismatch error, and I had to leave
oShape undefined. Why?
2.  The placement of the "Copy" statement turned out to be critical.
It works ok where it is placed, but when it is moved to the line:
'**Bad Location, the picture was truncated.
It appears that picture size was different, depending on where it was
copied. Why?

Sub PP_Creator()
  Dim oPPApp As PowerPoint.Application
  Dim oPres As PowerPoint.Presentation
  Dim oSlide As PowerPoint.Slide
  Dim oShape  'As ???
  Dim strPP_FileName As String
  Dim intSlideWidth As Integer
  Dim intSlideHeight As Integer

  intSlideWidth = 756     '** = 10.5 Inches
  intSlideHeight = 576    '** =  8.0 Inches
  strPP_FileName = "C:\MyFolder\MyFileName.ppt"

  '** Bad Location
'   Worksheets(1).Range("ppExport").CopyPicture Appearance:=xlScreen,
Format:=xlPicture

  Set oPPApp = New PowerPoint.Application
  Set oPres = oPPApp.Presentations.Add(True)
  Set oSlide = oPres.Slides.Add(1, ppLayoutBlank)

  With oPres.PageSetup
     .SlideSize = ppSlideSizeCustom
     .SlideWidth = intSlideWidth
     .SlideHeight = intSlideHeight
     .SlideOrientation = msoOrientationHorizontal
  End With

  '** Good Location
  Worksheets(1).Range("ppExport").CopyPicture Appearance:=xlScreen,
Format:=xlPicture

  oSlide.Shapes.PasteSpecial (ppPasteEnhancedMetafile)
  Set oShape = oSlide.Shapes(1)

  With oShape
     .LockAspectRatio = True

     '** Resize picture: Test if Width or Height is real constraint.
     If .Width / intSlideWidth > .Height / intSlideHeight Then
        '** It is a Width constraint
        .Width = oPres.PageSetup.SlideWidth - 20
     Else
        '** It is a Height constraint
        .Height = oPres.PageSetup.SlideHeight - 30
     End If

     .Top = 20
     .Left = (intSlideWidth - .Width) / 2
  End With

  oPres.SaveAs strPP_FileName

  Set oSlide = Nothing
  Set oPres = Nothing
  Set oShape = Nothing
End Sub

Thanks
dR
Steve Rindsberg - 07 Mar 2008 16:51 GMT
> I still have 2 puzzles:
> 1.  You had:
[quoted text clipped - 3 lines]
> In my implementation, I had a Type Mismatch error, and I had to leave
> oShape undefined. Why?

Because it's a part of the PowerPoint object model and you're writing code to run in
Excel.  You could either

Dim oShape as Object

or

Set a reference to PowerPoint then

Dim oShape as Shape
or
Dim oShape as PowerPoint.Shape

Then you can make another change that may make your code a bit more reliable ... see
comments below.

> 2.  The placement of the "Copy" statement turned out to be critical.
> It works ok where it is placed, but when it is moved to the line:
> '**Bad Location, the picture was truncated.
> It appears that picture size was different, depending on where it was
> copied. Why?

I don't have a reliable answer for that, but I've noticed that if I copy from Excel
then start PPT, I get different results on the clipboard (and from pasting) than if I
do the copy in Excel after starting PPT.  That would seem to explain your results too.

> Sub PP_Creator()
>    Dim oPPApp As PowerPoint.Application
[quoted text clipped - 30 lines]
>    oSlide.Shapes.PasteSpecial (ppPasteEnhancedMetafile)
>    Set oShape = oSlide.Shapes(1)

Try

Set oShape = oSlide.Shapes.PasteSpecial (ppPasteEnhancedMetafile)(1)

Then it won't rely on pasting into a blank slide.

>    With oShape
>       .LockAspectRatio = True
[quoted text clipped - 21 lines]
> Thanks
> dR

-----------------------------------------
Steve Rindsberg, PPT MVP
PPT FAQ:  www.pptfaq.com
PPTools:  www.pptools.com
================================================

Rate this thread:






 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.