Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.charting,microsoft.public.excel.programming
|
|||
|
|||
![]()
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 |
#2
![]()
Posted to microsoft.public.excel.charting,microsoft.public.excel.programming
|
|||
|
|||
![]()
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 _______ "Frank Hayes" wrote in message ... 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 |
#3
![]()
Posted to microsoft.public.excel.charting,microsoft.public.excel.programming
|
|||
|
|||
![]()
Jon,
Thank you for the original code and the upgrade. I appreciate your taking the time to look at it. Frank "Jon Peltier" wrote in message ... 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 _______ "Frank Hayes" wrote in message ... 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 |
#4
![]()
Posted to microsoft.public.excel.charting,microsoft.public.excel.programming
|
|||
|
|||
![]()
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 "Jon Peltier" wrote in message ... 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 _______ "Frank Hayes" wrote in message ... 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 |
#5
![]()
Posted to microsoft.public.excel.charting,microsoft.public.excel.programming
|
|||
|
|||
![]()
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 |
#6
![]()
Posted to microsoft.public.excel.charting,microsoft.public.excel.programming
|
|||
|
|||
![]()
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 _______ "Peter T" <peter_t@discussions wrote in message ... 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 |
#7
![]()
Posted to microsoft.public.excel.charting,microsoft.public.excel.programming
|
|||
|
|||
![]()
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 "Peter T" <peter_t@discussions wrote in message ... 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 |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
VB code to copy sheet format to another sheet | Excel Discussion (Misc queries) | |||
what is the vb code to copy rows from one sheet to another? | Excel Discussion (Misc queries) | |||
is there anyway to make it so the users of my excel spread sheet cant view the macro code w/o a password? | Excel Worksheet Functions | |||
Jon Peltier Speedometer Chart | Excel Discussion (Misc queries) | |||
Jon Peltier - Pivot Table Result for yesterday's "Complex Chart" Question | Charts and Charting in Excel |