简体   繁体   中英

VBA Excel to PPT export

I'm trying to transfer some code from one workbook to another and I'm having trouble figuring out why it's not working. I transferred the sheets into the new workbook and made the necessary updates in the code to reference the correct sheets. Everything else between the workbooks is consistent, but I keep receiving a compile error : User-defined type not defined. I tried debugging but I'm not sure what it's pointing to. Thanks in advance.

Sub CreatePP()

    Dim ppApp       As Object
    Dim ppSlide     As Object

    On Error Resume Next
    Set ppApp = GetObject(, "Powerpoint.Application")
    On Error GoTo 0

    If ppApp Is Nothing Then
        Set ppApp = CreateObject("Powerpoint.Application")
        ppApp.Visible = True
        ppApp.Presentations.Add
    End If


    Dim MySheets, i As Long

    MySheets = Array(Sheet44, Sheet45, Sheet46, Sheet47, Sheet43, Sheet42, Sheet41, Sheet40, Sheet48)  'these are sheet codenames not sheet name.
    MyRanges = Array("A1:Q45", "A1:Q45", "A1:Q45", "A1:Q45", "A1:Q45", "A1:Q45", "A1:Q45", "A1:Q45", "A1:Q45")

    For i = LBound(MySheets) To UBound(MySheets)
        If ppApp.ActivePresentation.Slides.Count = 0 Then
            Set ppSlide = ppApp.ActivePresentation.Slides.Add(1, 12) 'ppLayoutBlank
        Else
            ppApp.ActivePresentation.Slides.Add ppApp.ActivePresentation.Slides.Count + 1, 12
            Set ppSlide = ppApp.ActivePresentation.Slides(ppApp.ActivePresentation.Slides.Count)
        End If
        Copy_Paste_to_PowerPoint ppApp, ppSlide, MySheets(i), MySheets(i).Range(MyRanges(i)), xl_Bitmap
    Next




End Sub


Sub Copy_Paste_to_PowerPoint(ByRef ppApp As Object, ByRef ppSlide As Object, ByVal ObjectSheet As Worksheet, _
                                    ByRef PasteObject As Object, Optional ByVal Paste_Type As PasteFormat)


    Dim PasteRange      As Boolean
    Dim objChart        As ChartObject
    Dim lngSU           As Long

    Select Case TypeName(PasteObject)
        Case "Range"
            If Not TypeName(Selection) = "Range" Then Application.GoTo PasteObject.Cells(1)
            PasteRange = True
        Case "Chart": Set objChart = PasteObject.Parent
        Case "ChartObject": Set objChart = PasteObject
        Case Else
            MsgBox PasteObject.Name & " is not a valid object to paste. Macro will exit", vbCritical
            Exit Sub
    End Select

    With Application
        lngSU = .ScreenUpdating
        .ScreenUpdating = 0
    End With

    ppApp.ActiveWindow.View.GotoSlide ppSlide.SlideNumber

    On Error GoTo -1: On Error GoTo 0
    DoEvents

    If PasteRange Then
        If Paste_Type = xl_Bitmap Then
            '//Paste Range as Picture
            PasteObject.CopyPicture Appearance:=1, Format:=-4147
            ppSlide.Shapes.Paste.Select
        ElseIf Paste_Type = xl_HTML Then
            '//Paste Range as HTML
            PasteObject.Copy
            ppSlide.Shapes.PasteSpecial(8, link:=1).Select  'ppPasteHTML
        ElseIf Paste_Type = xl_Link Then
            '//Paste Range as Linked
            PasteObject.Copy
            ppSlide.Shapes.PasteSpecial(0, link:=1).Select   'ppPasteDefault
        End If
    Else
        If Paste_Type = xl_Link Then
            '//Copy & Paste Chart Linked
            objChart.Chart.ChartArea.Copy
            ppSlide.Shapes.PasteSpecial(link:=True).Select
        Else
            '//Copy & Paste Chart Not Linked
            objChart.Chart.CopyPicture Appearance:=1, Size:=1, Format:=2
            ppSlide.Shapes.Paste.Select
        End If
    End If

    '//Center pasted object in the slide
    With ppApp.ActiveWindow
        If .Height > .Selection.ShapeRange.Height Then
            .Selection.ShapeRange.LockAspectRatio = True
            .Selection.ShapeRange.Height = .Height * 0.82
        End If
        If .Selection.ShapeRange.Width > 708 Then
            .Selection.ShapeRange.LockAspectRatio = True
            .Selection.ShapeRange.Width = 708
        End If
        .Selection.ShapeRange.Align msoAlignCenters, True
        .Selection.ShapeRange.Align msoAlignMiddles, True
    End With

    With Application
        .CutCopyMode = False
        .ScreenUpdating = lngSU
    End With

    'AppActivate ("Microsoft Excel")

End Sub

When you copied that Copy_Paste_to_PowerPoint function you forgot to copy the enum.

Public Enum PasteFormat
    xl_Link = 0
    xl_HTML = 1
    xl_Bitmap = 2
End Enum

Did you get it from somewhere like here ? It looks a bit like that version. It looks like you or whoever you got that from stripped out the attribution. You really should put a comment attributing the source of your snippets in there. Not only is it a legal requirement of places like stackoverflow, but it's also quite useful for figuring out what code does, where it came from, and what might be wrong with it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM