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 / Excel / Charting / January 2008

Tip: Looking for answers? Try searching our database.

Macro Copy Excel Chart Sheet to PowePoint - Mod of Jon Peltier code

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Frank Hayes - 20 Jan 2008 18:52 GMT
Jon Peltier wrote a great macro to copy an Excel Chart on a worksheet (not a
chart sheet) to an open PowerPoint presentation.  I had need of a slightly
different version and modified the code to the state below to a) work with a
Chart sheet and b) preserve the size of the title font on the recopy.

My issue is that my original chart sheet is driven via a combo box.  I
choose an item in the combo box (e.g. "Asia" or "Europe") and the chart
automatically redisplays with that data.  My chart title also changes
dynamically depending on the combo box choice, i.e, the chart title is
"=DataSheet!$B$5".  When the macro below executes, it pastes a static
version of the title text back into the excel chart sheet instead of the
formula..  Can someone help me with the code to copy the dynamic link back
instead, such that the next time I change the combo box, the title will
refresh as well?

I would also like this single macro to work with charts where the title is
text, not a formula.

Thanks for any help

Frank

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

' This is a modification of code written by Jon Peltier found at
' http://peltiertech.com/Excel/XL_PPT.html
' the modification was made to work with a chart on a chart sheet instead of
' a chart in a worksheet.  In addition, the code was changed to restore the
' title font size back to its original size instead of the default.

' Modified by Frank Hayes

Dim PPApp As PowerPoint.Application
Dim PPPres As PowerPoint.Presentation
Dim PPSlide As PowerPoint.Slide
Dim PresentationFileName As Variant
Dim SlideCount As Long
Dim iCht As Integer
Dim sTitle
Dim sTitleSize As Integer

' Reference existing instance of PowerPoint
Set PPApp = GetObject(, "Powerpoint.Application")
' Reference active presentation
Set PPPres = PPApp.ActivePresentation
PPApp.ActiveWindow.ViewType = ppViewSlide

   With ActiveChart

       ' get chart title
       If .HasTitle Then
           sTitle = .ChartTitle.Text
           sTitleSize = .ChartTitle.Font.Size
       Else
           sTitle = ""
       End If

       ' remove title (or it will be redundant)
       .HasTitle = False

       ' copy chart as a picture
       .CopyPicture _
           Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture

       ' restore title
       If Len(sTitle) > 0 Then
           .HasTitle = True
           .ChartTitle.Text = sTitle
           .ChartTitle.Font.Size = sTitleSize
       End If

   End With

   ' Add a new slide and paste in the chart
   SlideCount = PPPres.Slides.Count
   Set PPSlide = PPPres.Slides.Add(SlideCount + 1, ppLayoutTitleOnly)
   PPApp.ActiveWindow.View.GotoSlide PPSlide.SlideIndex
   With PPSlide
       ' paste and select the chart picture
       .Shapes.Paste.Select
       ' align the chart
       PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
       PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
       .Shapes.Placeholders(1).TextFrame.TextRange.Text = sTitle
   End With

   MsgBox "Chart Copied To PowerPoint Presentation"

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

End Sub
Jon Peltier - 20 Jan 2008 19:57 GMT
While you can set the title of a chart text element, using R1C1 syntax like
this:

ActiveChart.ChartTitle.Text = "='Dot Data'!R6C3"

there seems to be no way to access this formula, that is, it's write-only.
However, by relying on our old old friend, XLM macro language, we can still
find the formula:

Sub ShowChartTitleFormula()
 Dim sFmla As String
 sFmla = ExecuteExcel4Macro("GET.FORMULA(""TITLE"")")
 MsgBox sFmla
End Sub

If the title contains text only, sFmla contains this text. If the title
contains a formula, sFmla contains the formula. Note: the chart must be the
active chart.

so activate the chart and change this line

   sTitle = .ChartTitle.Text

to

   sTitle = ExecuteExcel4Macro("GET.FORMULA(""TITLE"")")

- Jon
-------
Jon Peltier, Microsoft Excel MVP
Tutorials and Custom Solutions
Peltier Technical Services, Inc. - http://PeltierTech.com
_______

> Jon Peltier wrote a great macro to copy an Excel Chart on a worksheet (not
> a chart sheet) to an open PowerPoint presentation.  I had need of a
[quoted text clipped - 94 lines]
>
> End Sub
Frank Hayes - 20 Jan 2008 21:42 GMT
Jon,

Thank you for the original code and the upgrade.  I appreciate your taking
the time to look at it.

Frank

> While you can set the title of a chart text element, using R1C1 syntax
> like this:
[quoted text clipped - 130 lines]
>>
>> End Sub
Frank Hayes - 21 Jan 2008 12:40 GMT
Jon,

I am running into a Run-time error '13': Type mismatch on the sTitle =
ExecuteExcel4Macro("GETFORMULA(""TITLE"")") line.  When I debug and hover
over sTitle in the the failed line of code is see ... sTitle = ""

On my chart sheet the Chart Title box is ... ='Chart Data'!$C$5 ... and is
displaying the string ... EUROPE

I have also added the ActiveSheet.Activate line and msgbox to make sure I
was on the right worksheet (although it seems redundant to me since I am
calling the macro from that chart sheet.

I tried to test this using the example macro you provided and I am getting
the same error.  Here is the current code I am running.  Any guidance?  I am
running Excel 2003 SP2 on XP.

Sub ShowChartTitleFormula()
    Dim sTitle As String
    ActiveSheet.Activate
    MsgBox ActiveSheet.Name
    sTitle = ExecuteExcel4Macro("GETFORMULA(""TITLE"")")
    MsgBox sTitle
End Sub

'  **************************

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

' This is a modification of code written by Jon Peltier found at
' http://peltiertech.com/Excel/XL_PPT.html
' the modification was made to work with a chart on a chart sheet instead of
' a chart in a worksheet.  In addition, the code was changed to restore the
' title font size back to its original size instead of the default.

' Modified by Frank Hayes

Dim PPApp As PowerPoint.Application
Dim PPPres As PowerPoint.Presentation
Dim PPSlide As PowerPoint.Slide
Dim PresentationFileName As Variant
Dim SlideCount As Long
Dim iCht As Integer
Dim sTitle As String
Dim sTitleSize As Integer

' Reference existing instance of PowerPoint
Set PPApp = GetObject(, "Powerpoint.Application")
' Reference active presentation
Set PPPres = PPApp.ActivePresentation
PPApp.ActiveWindow.ViewType = ppViewSlide

ActiveSheet.Activate
MsgBox ActiveSheet.Name

   With ActiveChart

       ' get chart title
       If .HasTitle Then
'           sTitle = .ChartTitle.Text
           sTitle = ExecuteExcel4Macro("GETFORMULA(""TITLE"")")
           sTitleSize = .ChartTitle.Font.Size
           MsgBox sTitle

       Else
           sTitle = ""
       End If

       ' remove title (or it will be redundant)
       .HasTitle = False

       ' copy chart as a picture
       .CopyPicture _
           Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture

       ' restore title
       If Len(sTitle) > 0 Then
           .HasTitle = True
           .ChartTitle.Text = sTitle
           .ChartTitle.Font.Size = sTitleSize
       End If

   End With

   ' Add a new slide and paste in the chart
   SlideCount = PPPres.Slides.Count
   Set PPSlide = PPPres.Slides.Add(SlideCount + 1, ppLayoutTitleOnly)
   PPApp.ActiveWindow.View.GotoSlide PPSlide.SlideIndex
   With PPSlide
       ' paste and select the chart picture
       .Shapes.Paste.Select
       ' align the chart
       PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
       PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
       .Shapes.Placeholders(1).TextFrame.TextRange.Text = sTitle
   End With

   MsgBox "Chart Copied To PowerPoint Presentation"

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

End Sub

> While you can set the title of a chart text element, using R1C1 syntax
> like this:
[quoted text clipped - 130 lines]
>>
>> End Sub
Peter T - 21 Jan 2008 13:51 GMT
You're missing a dot,
change GETFORMULA to GET.FORMULA

Regards,
Peter T

"Frank Hayes" wrote in message
> Jon,
>
> I am running into a Run-time error '13': Type mismatch on the sTitle =
> ExecuteExcel4Macro("GETFORMULA(""TITLE"")") line.  When I debug and hover
> over sTitle in the the failed line of code is see ... sTitle = ""
<snip>
>         If .HasTitle Then
> '           sTitle = .ChartTitle.Text
>             sTitle = ExecuteExcel4Macro("GETFORMULA(""TITLE"")")
>             sTitleSize = .ChartTitle.Font.Size
>             MsgBox sTitle
<snip>
Jon Peltier - 21 Jan 2008 17:51 GMT
Also, the chart must be active as well as the parent sheet.

- Jon
-------
Jon Peltier, Microsoft Excel MVP
Tutorials and Custom Solutions
Peltier Technical Services, Inc. - http://PeltierTech.com
_______

> You're missing a dot,
> change GETFORMULA to GET.FORMULA
[quoted text clipped - 15 lines]
>>             MsgBox sTitle
> <snip>
Frank Hayes - 22 Jan 2008 00:26 GMT
Peter and Jon,
Thank you both for the help.

Here is the revised code for anyone who wants it.

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

' This is a modification of code written by Jon Peltier found at
' http://peltiertech.com/Excel/XL_PPT.html
' the modification was made to work with a chart on a chart sheet instead of
' a chart in a worksheet.  In addition, the code was changed to restore the
' title font size back to its original size instead of the default.

' Modified by Frank Hayes

Dim PPApp As PowerPoint.Application
Dim PPPres As PowerPoint.Presentation
Dim PPSlide As PowerPoint.Slide
Dim PresentationFileName As Variant
Dim SlideCount As Long
Dim iCht As Integer
Dim sTitle As String
Dim sTitleText As String
Dim sTitleSize As Integer

' Reference existing instance of PowerPoint
 Set PPApp = GetObject(, "Powerpoint.Application")
' Reference active presentation
 Set PPPres = PPApp.ActivePresentation
 PPApp.ActiveWindow.ViewType = ppViewSlide

 ActiveSheet.Activate

   With ActiveChart

       ' get chart title
       If .HasTitle Then
           sTitleText = .ChartTitle.Text
           sTitle = ExecuteExcel4Macro("GET.FORMULA(""TITLE"")")
           sTitleSize = .ChartTitle.Font.Size
       Else
           sTitle = ""
       End If

       ' remove title (or it will be redundant)
       .HasTitle = False

       ' copy chart as a picture
       .CopyPicture _
           Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture

'        ' restore title
       If Len(sTitle) > 0 Then
           .HasTitle = True
           .ChartTitle.Text = sTitle
           .ChartTitle.Font.Size = sTitleSize
       End If

   End With

   ' Add a new slide and paste in the chart
   SlideCount = PPPres.Slides.Count
   Set PPSlide = PPPres.Slides.Add(SlideCount + 1, ppLayoutTitleOnly)
   PPApp.ActiveWindow.View.GotoSlide PPSlide.SlideIndex
   With PPSlide
       ' paste and select the chart picture
       .Shapes.Paste.Select
       ' align the chart
       PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
       PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
       .Shapes.Placeholders(1).TextFrame.TextRange.Text = sTitleText
   End With

   MsgBox "Chart Copied To PowerPoint Presentation"

   Application.Calculate

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

End Sub

> You're missing a dot,
> change GETFORMULA to GET.FORMULA
[quoted text clipped - 15 lines]
>>             MsgBox sTitle
> <snip>
 
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



©2009 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.