Excel VBA Run-time error 2147188160 (80048240) Automation Error

Anant picture Anant · Oct 15, 2013 · Viewed 7.8k times · Source

I am trying to create a ppt with text entries from excel placed in couple of columns.

Have googled a lot but not able to make any headway on Run-time error 2147188160 (80048240) Automation Error.

Found this link on micrsoft site http://support.microsoft.com/kb/155073 which says this is a bug in Office 2007. Any one can suggest any workarounds.

My code is as follows:

    Sub CreateSlides()
    Dim aData As String
    Dim newPPT As PowerPoint.Application
    Dim Actslide As PowerPoint.Slide
    Dim Actshape As PowerPoint.Shape

    Dim lngSlideHeight      As Long
    Dim lngSlideWidth       As Long

    Dim i, x, rowcount, slinum, slicount As Integer

    Dim Size As Integer

Set newPPT = New PowerPoint.Application
newPPT.Presentations.Add
newPPT.ActivePresentation.Slides.Add newPPT.ActivePresentation.Slides.Count + 1, ppLayoutBlank
newPPT.Visible = msoTrue

lngSlideHeight = newPPT.ActivePresentation.PageSetup.SlideHeight
lngSlideWidth = newPPT.ActivePresentation.PageSetup.SlideWidth

ActiveSheet.Cells(1, 1).Select
rowcount = ActiveSheet.UsedRange.Rows.Count

slinum = 1
x = 1

'create slides
For slinum = 1 To 2 * rowcount + 10
    Set Actslide = newPPT.ActivePresentation.Slides(slinum)
    newPPT.ActivePresentation.Slides.Add newPPT.ActivePresentation.Slides.Count + 1, ppLayoutBlank
Next slinum

'copy words
slinum = 1
x = 1
For x = 1 To rowcount

    ActiveSheet.Cells(x, 1).Select
    Selection.Copy
    newPPT.Visible = True

    newPPT.ActiveWindow.View.GotoSlide (slinum)
    newPPT.ActiveWindow.Panes(2).Activate
    Set Actslide = newPPT.ActivePresentation.Slides(slinum)
     newPPT.ActiveWindow.View.PasteSpecial DataType:=ppPasteDefault

    newPPT.ActiveWindow.Selection.ShapeRange.Top = (lngSlideHeight - newPPT.ActiveWindow.Selection.ShapeRange.Height) / 2
    newPPT.ActiveWindow.Selection.ShapeRange.Height = 400
    newPPT.ActiveWindow.Selection.ShapeRange.Left = 1
    newPPT.ActiveWindow.Selection.ShapeRange.Width = lngSlideWidth - 1
    newPPT.ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
    newPPT.ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Font.Size = 48

        If slinum Mod 9 = 0 Then
            slinum = slinum + 9
        End If

    slinum = slinum + 1
Next x

slicount = 2 * rowcount + 10
slinum = 10
x = 1
i = 1
For x = 1 To rowcount

    ActiveSheet.Cells(x, 2).Select
    Selection.Copy
    If i = 1 Then
        newPPT.Visible = True
        newPPT.ActiveWindow.Panes(2).Activate
        newPPT.ActiveWindow.View.GotoSlide (slinum + 2)
        Else
            If i = 2 Then
            newPPT.Visible = True
            newPPT.ActiveWindow.Panes(2).Activate
            newPPT.ActiveWindow.View.GotoSlide (slinum)
            Else
                If i = 3 Then
                newPPT.Visible = True
                newPPT.ActiveWindow.Panes(2).Activate
                newPPT.ActiveWindow.View.GotoSlide (slinum - 2)
                End If
            End If
    End If
    i = i + 1

    If i = 4 Then
        i = 1
    End If

    newPPT.ActiveWindow.View.PasteSpecial DataType:=ppPasteDefault
    newPPT.ActiveWindow.Selection.ShapeRange.Top = (lngSlideHeight - newPPT.ActiveWindow.Selection.ShapeRange.Height) / 2
    newPPT.ActiveWindow.Selection.ShapeRange.Height = 400
    newPPT.ActiveWindow.Selection.ShapeRange.Left = 1
    newPPT.ActiveWindow.Selection.ShapeRange.Width = lngSlideWidth - 1
    newPPT.ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
    newPPT.ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Font.Size = 28

        If slinum Mod 9 = 0 Then
            slinum = slinum + 9
        End If

        If slinum > slicount Then
            Exit For
        End If

    slinum = slinum + 1
Next x


End Sub

Answer

Steve Rindsberg picture Steve Rindsberg · Oct 16, 2013

This is more a set of comments than an answer, but the comment fields don't allow for any reasonable formatting. See comments in-line:

   Sub CreateSlides()
    Dim aData As String
    Dim newPPT As PowerPoint.Application
    Dim Actslide As PowerPoint.Slide
    Dim Actshape As PowerPoint.Shape

' SlideHeight and Width are Singles, not Longs
    Dim lngSlideHeight      As Long
    Dim lngSlideWidth       As Long

' Here, you've DIMmed all of the variables as variants, not integers:
    Dim i, x, rowcount, slinum, slicount As Integer
' You really want:
'   Dim i as Long, x as Long ....etc.
'   Note that most if not all of these should be longs, not integers
'   Generally, VBA will convert for you as needed, but once in a while it'll
'   turn round and bite you.  Better to use the correct data types in the first place.

    Dim Size As Integer

Set newPPT = New PowerPoint.Application
' I'd move this here rather than below:
newPPT.Visible = msoTrue

newPPT.Presentations.Add
newPPT.ActivePresentation.Slides.Add newPPT.ActivePresentation.Slides.Count + 1, ppLayoutBlank
' newPPT.Visible = msoTrue

lngSlideHeight = newPPT.ActivePresentation.PageSetup.SlideHeight
lngSlideWidth = newPPT.ActivePresentation.PageSetup.SlideWidth

ActiveSheet.Cells(1, 1).Select

' Check what UsedRange returns against what you THINK it's supposed to return.
' Sometimes it's not quite what you expect:
rowcount = ActiveSheet.UsedRange.Rows.Count

' No need for either of these; the For/Next syntax takes care of that
'slinum = 1
'x = 1

'create slides
For slinum = 1 To 2 * rowcount + 10
    Set Actslide = newPPT.ActivePresentation.Slides(slinum)
    newPPT.ActivePresentation.Slides.Add newPPT.ActivePresentation.Slides.Count + 1, ppLayoutBlank
Next slinum

'copy words
slinum = 1
x = 1
For x = 1 To rowcount

    ActiveSheet.Cells(x, 1).Select
    Selection.Copy
    newPPT.Visible = True

    newPPT.ActiveWindow.View.GotoSlide (slinum)
    newPPT.ActiveWindow.Panes(2).Activate
    Set Actslide = newPPT.ActivePresentation.Slides(slinum)
     newPPT.ActiveWindow.View.PasteSpecial DataType:=ppPasteDefault

    newPPT.ActiveWindow.Selection.ShapeRange.Top = (lngSlideHeight - newPPT.ActiveWindow.Selection.ShapeRange.Height) / 2
    newPPT.ActiveWindow.Selection.ShapeRange.Height = 400
    newPPT.ActiveWindow.Selection.ShapeRange.Left = 1
    newPPT.ActiveWindow.Selection.ShapeRange.Width = lngSlideWidth - 1
    newPPT.ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
    newPPT.ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Font.Size = 48

        If slinum Mod 9 = 0 Then
            slinum = slinum + 9
        End If

    slinum = slinum + 1
Next x

slicount = 2 * rowcount + 10
slinum = 10
x = 1
i = 1
For x = 1 To rowcount

    ActiveSheet.Cells(x, 2).Select
    Selection.Copy
    If i = 1 Then
        newPPT.Visible = True
        newPPT.ActiveWindow.Panes(2).Activate
        newPPT.ActiveWindow.View.GotoSlide (slinum + 2)
        Else
            If i = 2 Then
            newPPT.Visible = True
            newPPT.ActiveWindow.Panes(2).Activate
            newPPT.ActiveWindow.View.GotoSlide (slinum)
            Else
                If i = 3 Then
                newPPT.Visible = True
                newPPT.ActiveWindow.Panes(2).Activate
                newPPT.ActiveWindow.View.GotoSlide (slinum - 2)
                End If
            End If
    End If
    i = i + 1

    If i = 4 Then
        i = 1
    End If

    newPPT.ActiveWindow.View.PasteSpecial DataType:=ppPasteDefault
    newPPT.ActiveWindow.Selection.ShapeRange.Top = (lngSlideHeight - newPPT.ActiveWindow.Selection.ShapeRange.Height) / 2
    newPPT.ActiveWindow.Selection.ShapeRange.Height = 400
    newPPT.ActiveWindow.Selection.ShapeRange.Left = 1
    newPPT.ActiveWindow.Selection.ShapeRange.Width = lngSlideWidth - 1
    newPPT.ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.ParagraphFormat.Alignment = ppAlignCenter
    newPPT.ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Font.Size = 28

        If slinum Mod 9 = 0 Then
            slinum = slinum + 9
        End If

        If slinum > slicount Then
            Exit For
        End If

    slinum = slinum + 1
Next x


End Sub