Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
How do I copy and paste a powerpoint slide from excel using vba co
How do I copy and paste a powerpoint slide from excel using vba code
|
#2
Posted to microsoft.public.excel.programming
|
|||
|
|||
How do I copy and paste a powerpoint slide from excel using vba co
Are you automating PowerPoint or Excel?
Either way, you'll probably need to know some PowerPoint VBA. HTH, JP "LilacSpokane" wrote in message ... How do I copy and paste a powerpoint slide from excel using vba code |
#3
Posted to microsoft.public.excel.programming
|
|||
|
|||
How do I copy and paste a powerpoint slide from excel using vbaco
' I'm assuming you want to transfer with VBA Excel stuff into PP
slides. For that ' Copy and paste the below code into a new VBA code module. ' After you have selected in Excel one or multiple charts or one or multiple areas start the macro ' "CreateSlidesFromSelection" . Then the macro will paste these selections as pictures ' in new or existing PP slides. By default new PP sildes will be created, by ' pressing the shift key you can make it paste to the ccurrently active slide, unless there is active slide. I'm ' starting this macro with a custom button on my custom toolbar. ' Works like a charm and is a great time saver if you have to create PP slides with Excel content frequently. '-------------------------------------------------------------------------------------------------------------------------------------- Option Explicit Public Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer Function Key_pressed(key_to_check As Long) As Boolean If GetAsyncKeyState(key_to_check) And &H8000 Then Key_pressed = True Else Key_pressed = False End If End Function Sub CreateSlidesFromSelection() ''' COPY ONE OR MULTIPLE SELECTED EXCEL CHARTS OR SELECTED AREAS INTO POWERPOINT ' In the "tools" menu of the Visual Basic Editor set a reference to ' Microsoft PowerPoint Object Library Dim Sh As Shape Dim i As Integer Dim titel As String Dim new_slide As Boolean Dim half_size As Boolean Dim PasteSuccess As Boolean ' In case the shift key is pressed down while starting the macro ' the selection will be posted into an existing slide if available. ' if no slide or no presentation is open it will be created. new_slide = Not Key_pressed(vbKeyShift) ' In case the Control key is pressed down while starting the macro ' the selection will be posted on the right side of the slide with ' a smaller scaling to allow for text on the left side of the slide half_size = Key_pressed(vbKeyControl) On Error GoTo exitsub If Not ActiveChart Is Nothing Then ' one chart is selected On Error Resume Next titel = ActiveChart.ChartTitle.Characters.Text & " " titel = titel & ActiveChart.Axes(xlValue).AxisTitle.Characters.Tex t On Error GoTo 0 ' Copy chart as a picture Application.ActiveChart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture Call PasteChart(new_slide, half_size, titel) PasteSuccess = True Else On Error Resume Next i = Selection.ShapeRange.Count 'if there is no error multiple charts are selected If err.Number = 0 Then ' err.number is zero because we have a multiple selection ' err.Clear On Error GoTo 0 For Each Sh In Selection.ShapeRange If Sh.Type = msoChart Then ' IS SHAPE A CHART? Sh.Select Application.ActiveChart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture titel = "" On Error Resume Next titel = ActiveChart.ChartTitle.Characters.Text & " " titel = titel & ActiveChart.Axes(xlValue).AxisTitle.Characters.Tex t On Error GoTo 0 Call PasteChart(new_slide, half_size, titel) PasteSuccess = True End If Next Else ' in case no charts we might have one or more cell selections For i = 1 To Selection.Areas.Count If Selection.Areas(i).Cells.Count < 2 Then If MsgBox("You have selected a single cell." & Chr(10) & _ "Should this single cell be copied to PowerPoint?", vbYesNo) = vbNo Then GoTo nextone End If End If Selection.Areas(i).Copy Call PasteChart(new_slide, half_size, titel) PasteSuccess = True Application.CutCopyMode = False nextone: Next i End If End If If PasteSuccess Then getPP.Activate ' Application.WindowState = xlMinimized exitsub: End Sub Private Sub PasteChart(newSlide As Boolean, toTheRight As Boolean, slideTitle As String) Dim PPApp As PowerPoint.Application Dim PPPres As PowerPoint.Presentation Dim PPSlide As PowerPoint.Slide Dim sID As Integer ' as slideindex Dim cScale As Single Dim ChartHeight As Integer Dim ChartWidth As Integer Set PPApp = getPP() Set PPPres = getPresentation(PPApp) On Error Resume Next If newSlide Then sID = 1 sID = sID + PPApp.ActiveWindow.Selection.SlideRange.SlideIndex 'lets add below the actual one PPPres.Slides.Add sID, ppLayoutTitleOnly ' add a slide as #1 or below the actual one Else sID = PPApp.ActiveWindow.Selection.SlideRange.SlideIndex 'is there a slide existing? If sID = 0 Then 'in case there is no slide sID = 1 PPPres.Slides.Add sID, ppLayoutTitleOnly ' add a slide to the empty presentation End If End If On Error GoTo 0 PPPres.Slides(sID).Select PPApp.ActiveWindow.ViewType = ppViewSlide Set PPSlide = PPPres.Slides(PPApp.ActiveWindow.Selection.SlideRa nge.SlideIndex) PPSlide.Shapes.PasteSpecial(ppPasteMetafilePicture ).Select ChartHeight = PPApp.ActiveWindow.Selection.ShapeRange.Height ChartWidth = PPApp.ActiveWindow.Selection.ShapeRange.Width If ChartWidth / ChartHeight 1.75 Then cScale = 700 / ChartWidth Else cScale = 400 / ChartHeight End If If toTheRight Then ' Scale and Align pasted chart cScale = cScale / 1.5 With PPApp.ActiveWindow.Selection.ShapeRange .ScaleWidth cScale, msoFalse, msoScaleFromTopLeft .ScaleHeight cScale, msoFalse, msoScaleFromBottomRight .Align msoAlignRights, True .Align msoAlignMiddles, True .IncrementLeft -25# End With Else With PPApp.ActiveWindow.Selection.ShapeRange .ScaleWidth cScale, msoFalse, msoScaleFromTopLeft .ScaleHeight cScale, msoFalse, msoScaleFromBottomRight .Align msoAlignCenters, True .Align msoAlignMiddles, True .IncrementTop 12# End With End If PPApp.ActiveWindow.ViewType = ppViewNormal If PPSlide.Shapes.title.TextFrame.TextRange.Text = "" Then 'set title in case there is none already PPSlide.Shapes.title.TextFrame.TextRange.Text = slideTitle End If Set PPSlide = Nothing Set PPPres = Nothing Set PPApp = Nothing End Sub Private Function getPP() As PowerPoint.Application On Error Resume Next Set getPP = GetObject("Powerpoint.Application") If err.Number < 0 Then ' iff PP isn't there lets start it Set getPP = CreateObject("Powerpoint.Application") err.Clear End If getPP.Visible = msoCTrue End Function Private Function getPresentation(PPApp As PowerPoint.Application) As PowerPoint.Presentation ' Reference active presentation On Error Resume Next Set getPresentation = PPApp.ActivePresentation If err.Number < 0 Then 'if no presentation lets create one Set getPresentation = PPApp.Presentations.Add(True) err.Clear End If End Function |
#4
Posted to microsoft.public.excel.programming
|
|||
|
|||
How do I copy and paste a powerpoint slide from excel using vb
If you want to use a macro, look he
http://peltiertech.com/Excel/XL_PPT.html Personally, I would just embed a link to the .ppt slide that you are working with: http://presentationsoft.about.com/od...xcelchrt_3.htm I've used this technique with great success!! Regards, Ryan--- -- RyGuy "minimaster" wrote: ' I'm assuming you want to transfer with VBA Excel stuff into PP slides. For that ' Copy and paste the below code into a new VBA code module. ' After you have selected in Excel one or multiple charts or one or multiple areas start the macro ' "CreateSlidesFromSelection" . Then the macro will paste these selections as pictures ' in new or existing PP slides. By default new PP sildes will be created, by ' pressing the shift key you can make it paste to the ccurrently active slide, unless there is active slide. I'm ' starting this macro with a custom button on my custom toolbar. ' Works like a charm and is a great time saver if you have to create PP slides with Excel content frequently. '-------------------------------------------------------------------------------------------------------------------------------------- Option Explicit Public Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer Function Key_pressed(key_to_check As Long) As Boolean If GetAsyncKeyState(key_to_check) And &H8000 Then Key_pressed = True Else Key_pressed = False End If End Function Sub CreateSlidesFromSelection() ''' COPY ONE OR MULTIPLE SELECTED EXCEL CHARTS OR SELECTED AREAS INTO POWERPOINT ' In the "tools" menu of the Visual Basic Editor set a reference to ' Microsoft PowerPoint Object Library Dim Sh As Shape Dim i As Integer Dim titel As String Dim new_slide As Boolean Dim half_size As Boolean Dim PasteSuccess As Boolean ' In case the shift key is pressed down while starting the macro ' the selection will be posted into an existing slide if available. ' if no slide or no presentation is open it will be created. new_slide = Not Key_pressed(vbKeyShift) ' In case the Control key is pressed down while starting the macro ' the selection will be posted on the right side of the slide with ' a smaller scaling to allow for text on the left side of the slide half_size = Key_pressed(vbKeyControl) On Error GoTo exitsub If Not ActiveChart Is Nothing Then ' one chart is selected On Error Resume Next titel = ActiveChart.ChartTitle.Characters.Text & " " titel = titel & ActiveChart.Axes(xlValue).AxisTitle.Characters.Tex t On Error GoTo 0 ' Copy chart as a picture Application.ActiveChart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture Call PasteChart(new_slide, half_size, titel) PasteSuccess = True Else On Error Resume Next i = Selection.ShapeRange.Count 'if there is no error multiple charts are selected If err.Number = 0 Then ' err.number is zero because we have a multiple selection ' err.Clear On Error GoTo 0 For Each Sh In Selection.ShapeRange If Sh.Type = msoChart Then ' IS SHAPE A CHART? Sh.Select Application.ActiveChart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture titel = "" On Error Resume Next titel = ActiveChart.ChartTitle.Characters.Text & " " titel = titel & ActiveChart.Axes(xlValue).AxisTitle.Characters.Tex t On Error GoTo 0 Call PasteChart(new_slide, half_size, titel) PasteSuccess = True End If Next Else ' in case no charts we might have one or more cell selections For i = 1 To Selection.Areas.Count If Selection.Areas(i).Cells.Count < 2 Then If MsgBox("You have selected a single cell." & Chr(10) & _ "Should this single cell be copied to PowerPoint?", vbYesNo) = vbNo Then GoTo nextone End If End If Selection.Areas(i).Copy Call PasteChart(new_slide, half_size, titel) PasteSuccess = True Application.CutCopyMode = False nextone: Next i End If End If If PasteSuccess Then getPP.Activate ' Application.WindowState = xlMinimized exitsub: End Sub Private Sub PasteChart(newSlide As Boolean, toTheRight As Boolean, slideTitle As String) Dim PPApp As PowerPoint.Application Dim PPPres As PowerPoint.Presentation Dim PPSlide As PowerPoint.Slide Dim sID As Integer ' as slideindex Dim cScale As Single Dim ChartHeight As Integer Dim ChartWidth As Integer Set PPApp = getPP() Set PPPres = getPresentation(PPApp) On Error Resume Next If newSlide Then sID = 1 sID = sID + PPApp.ActiveWindow.Selection.SlideRange.SlideIndex 'lets add below the actual one PPPres.Slides.Add sID, ppLayoutTitleOnly ' add a slide as #1 or below the actual one Else sID = PPApp.ActiveWindow.Selection.SlideRange.SlideIndex 'is there a slide existing? If sID = 0 Then 'in case there is no slide sID = 1 PPPres.Slides.Add sID, ppLayoutTitleOnly ' add a slide to the empty presentation End If End If On Error GoTo 0 PPPres.Slides(sID).Select PPApp.ActiveWindow.ViewType = ppViewSlide Set PPSlide = PPPres.Slides(PPApp.ActiveWindow.Selection.SlideRa nge.SlideIndex) PPSlide.Shapes.PasteSpecial(ppPasteMetafilePicture ).Select ChartHeight = PPApp.ActiveWindow.Selection.ShapeRange.Height ChartWidth = PPApp.ActiveWindow.Selection.ShapeRange.Width If ChartWidth / ChartHeight 1.75 Then cScale = 700 / ChartWidth Else cScale = 400 / ChartHeight End If If toTheRight Then ' Scale and Align pasted chart cScale = cScale / 1.5 With PPApp.ActiveWindow.Selection.ShapeRange .ScaleWidth cScale, msoFalse, msoScaleFromTopLeft .ScaleHeight cScale, msoFalse, msoScaleFromBottomRight .Align msoAlignRights, True .Align msoAlignMiddles, True .IncrementLeft -25# End With Else With PPApp.ActiveWindow.Selection.ShapeRange .ScaleWidth cScale, msoFalse, msoScaleFromTopLeft .ScaleHeight cScale, msoFalse, msoScaleFromBottomRight .Align msoAlignCenters, True .Align msoAlignMiddles, True .IncrementTop 12# End With End If PPApp.ActiveWindow.ViewType = ppViewNormal If PPSlide.Shapes.title.TextFrame.TextRange.Text = "" Then 'set title in case there is none already PPSlide.Shapes.title.TextFrame.TextRange.Text = slideTitle End If Set PPSlide = Nothing Set PPPres = Nothing Set PPApp = Nothing End Sub Private Function getPP() As PowerPoint.Application On Error Resume Next Set getPP = GetObject("Powerpoint.Application") If err.Number < 0 Then ' iff PP isn't there lets start it Set getPP = CreateObject("Powerpoint.Application") err.Clear End If getPP.Visible = msoCTrue End Function Private Function getPresentation(PPApp As PowerPoint.Application) As PowerPoint.Presentation ' Reference active presentation On Error Resume Next Set getPresentation = PPApp.ActivePresentation If err.Number < 0 Then 'if no presentation lets create one Set getPresentation = PPApp.Presentations.Add(True) err.Clear End If End Function |
#5
Posted to microsoft.public.excel.programming
|
|||
|
|||
How do I copy and paste a powerpoint slide from excel using vb
Thank you very much. That had exactly what I needed in it.
"minimaster" wrote: ' I'm assuming you want to transfer with VBA Excel stuff into PP slides. For that ' Copy and paste the below code into a new VBA code module. ' After you have selected in Excel one or multiple charts or one or multiple areas start the macro ' "CreateSlidesFromSelection" . Then the macro will paste these selections as pictures ' in new or existing PP slides. By default new PP sildes will be created, by ' pressing the shift key you can make it paste to the ccurrently active slide, unless there is active slide. I'm ' starting this macro with a custom button on my custom toolbar. ' Works like a charm and is a great time saver if you have to create PP slides with Excel content frequently. '-------------------------------------------------------------------------------------------------------------------------------------- Option Explicit Public Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer Function Key_pressed(key_to_check As Long) As Boolean If GetAsyncKeyState(key_to_check) And &H8000 Then Key_pressed = True Else Key_pressed = False End If End Function Sub CreateSlidesFromSelection() ''' COPY ONE OR MULTIPLE SELECTED EXCEL CHARTS OR SELECTED AREAS INTO POWERPOINT ' In the "tools" menu of the Visual Basic Editor set a reference to ' Microsoft PowerPoint Object Library Dim Sh As Shape Dim i As Integer Dim titel As String Dim new_slide As Boolean Dim half_size As Boolean Dim PasteSuccess As Boolean ' In case the shift key is pressed down while starting the macro ' the selection will be posted into an existing slide if available. ' if no slide or no presentation is open it will be created. new_slide = Not Key_pressed(vbKeyShift) ' In case the Control key is pressed down while starting the macro ' the selection will be posted on the right side of the slide with ' a smaller scaling to allow for text on the left side of the slide half_size = Key_pressed(vbKeyControl) On Error GoTo exitsub If Not ActiveChart Is Nothing Then ' one chart is selected On Error Resume Next titel = ActiveChart.ChartTitle.Characters.Text & " " titel = titel & ActiveChart.Axes(xlValue).AxisTitle.Characters.Tex t On Error GoTo 0 ' Copy chart as a picture Application.ActiveChart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture Call PasteChart(new_slide, half_size, titel) PasteSuccess = True Else On Error Resume Next i = Selection.ShapeRange.Count 'if there is no error multiple charts are selected If err.Number = 0 Then ' err.number is zero because we have a multiple selection ' err.Clear On Error GoTo 0 For Each Sh In Selection.ShapeRange If Sh.Type = msoChart Then ' IS SHAPE A CHART? Sh.Select Application.ActiveChart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture titel = "" On Error Resume Next titel = ActiveChart.ChartTitle.Characters.Text & " " titel = titel & ActiveChart.Axes(xlValue).AxisTitle.Characters.Tex t On Error GoTo 0 Call PasteChart(new_slide, half_size, titel) PasteSuccess = True End If Next Else ' in case no charts we might have one or more cell selections For i = 1 To Selection.Areas.Count If Selection.Areas(i).Cells.Count < 2 Then If MsgBox("You have selected a single cell." & Chr(10) & _ "Should this single cell be copied to PowerPoint?", vbYesNo) = vbNo Then GoTo nextone End If End If Selection.Areas(i).Copy Call PasteChart(new_slide, half_size, titel) PasteSuccess = True Application.CutCopyMode = False nextone: Next i End If End If If PasteSuccess Then getPP.Activate ' Application.WindowState = xlMinimized exitsub: End Sub Private Sub PasteChart(newSlide As Boolean, toTheRight As Boolean, slideTitle As String) Dim PPApp As PowerPoint.Application Dim PPPres As PowerPoint.Presentation Dim PPSlide As PowerPoint.Slide Dim sID As Integer ' as slideindex Dim cScale As Single Dim ChartHeight As Integer Dim ChartWidth As Integer Set PPApp = getPP() Set PPPres = getPresentation(PPApp) On Error Resume Next If newSlide Then sID = 1 sID = sID + PPApp.ActiveWindow.Selection.SlideRange.SlideIndex 'lets add below the actual one PPPres.Slides.Add sID, ppLayoutTitleOnly ' add a slide as #1 or below the actual one Else sID = PPApp.ActiveWindow.Selection.SlideRange.SlideIndex 'is there a slide existing? If sID = 0 Then 'in case there is no slide sID = 1 PPPres.Slides.Add sID, ppLayoutTitleOnly ' add a slide to the empty presentation End If End If On Error GoTo 0 PPPres.Slides(sID).Select PPApp.ActiveWindow.ViewType = ppViewSlide Set PPSlide = PPPres.Slides(PPApp.ActiveWindow.Selection.SlideRa nge.SlideIndex) PPSlide.Shapes.PasteSpecial(ppPasteMetafilePicture ).Select ChartHeight = PPApp.ActiveWindow.Selection.ShapeRange.Height ChartWidth = PPApp.ActiveWindow.Selection.ShapeRange.Width If ChartWidth / ChartHeight 1.75 Then cScale = 700 / ChartWidth Else cScale = 400 / ChartHeight End If If toTheRight Then ' Scale and Align pasted chart cScale = cScale / 1.5 With PPApp.ActiveWindow.Selection.ShapeRange .ScaleWidth cScale, msoFalse, msoScaleFromTopLeft .ScaleHeight cScale, msoFalse, msoScaleFromBottomRight .Align msoAlignRights, True .Align msoAlignMiddles, True .IncrementLeft -25# End With Else With PPApp.ActiveWindow.Selection.ShapeRange .ScaleWidth cScale, msoFalse, msoScaleFromTopLeft .ScaleHeight cScale, msoFalse, msoScaleFromBottomRight .Align msoAlignCenters, True .Align msoAlignMiddles, True .IncrementTop 12# End With End If PPApp.ActiveWindow.ViewType = ppViewNormal If PPSlide.Shapes.title.TextFrame.TextRange.Text = "" Then 'set title in case there is none already PPSlide.Shapes.title.TextFrame.TextRange.Text = slideTitle End If Set PPSlide = Nothing Set PPPres = Nothing Set PPApp = Nothing End Sub Private Function getPP() As PowerPoint.Application On Error Resume Next Set getPP = GetObject("Powerpoint.Application") If err.Number < 0 Then ' iff PP isn't there lets start it Set getPP = CreateObject("Powerpoint.Application") err.Clear End If getPP.Visible = msoCTrue End Function Private Function getPresentation(PPApp As PowerPoint.Application) As PowerPoint.Presentation ' Reference active presentation On Error Resume Next Set getPresentation = PPApp.ActivePresentation If err.Number < 0 Then 'if no presentation lets create one Set getPresentation = PPApp.Presentations.Add(True) err.Clear End If End Function |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
Can I paste a chart from Excel into a powerpoint slide "Placeholde | Charts and Charting in Excel | |||
How do I create a new slide in PowerPoint from Excel using VBA? | Excel Programming | |||
Excel sheet to Powerpoint slide | Excel Programming | |||
A way to convert Excel worksheet into Powerpoint slide | Excel Discussion (Misc queries) | |||
Using excel vba to produce a powerpoint slide | Excel Programming |