Excel VBA, создание презентации PPT. Разные ошибки при каждом выполнении кода

#excel #vba #charts #powerpoint #libraries

Вопрос:

спасибо, что нашли время прочитать это.

Что я делаю: Я пытаюсь создать файл PPT из Excel. Я копирую и вставляю содержимое (диапазоны и диаграммы) из excel в PPT, кроме того, я также создаю и редактирую текстовые поля.

Ошибки: Иногда код выполняется безупречно (x Ошибки, которые я получаю, время от времени меняются и выделяют различные фрагменты кода, которые работают в других разделах кода (которые никогда не содержат ошибок).

Ошибка A: Ошибка во время выполнения ‘-2147023170 (800706be)’: Ошибка автоматизации, сбой удаленного вызова процедуры

Ошибка B: Ошибка во время выполнения «462»: Удаленный серверный компьютер не существует или недоступен

 'Create PPT
 Option Explicit

 Sub create_ppt()
 Dim pp_app As PowerPoint.Application
 Dim pp_pres As PowerPoint.Presentation
 Dim pp_slide As PowerPoint.Slide
 Dim pp_textB As PowerPoint.Shape

 Set pp_app = New PowerPoint.Application

 pp_app.Visible = msoTrue
 pp_app.Activate

 Set pp_pres = pp_app.Presentations.Add

 'First Slide
Set pp_slide = pp_pres.Slides.Add(1, ppLayoutTitle)

pp_slide.Shapes(1).TextFrame.TextRange.Text = "xxx"
pp_slide.Shapes(2).TextFrame.TextRange.Text = "xxx"

 'Second Slide
Set pp_slide = pp_pres.Slides.Add(2, ppLayoutBlank)
pp_slide.Select

Excel.Sheets("Dashboard").Range("Dashboard_Frame").Copy
pp_slide.Shapes.PasteSpecial ppPasteOLEObject
pp_slide.Shapes(1).Width = 775
pp_slide.Shapes(1).Height = 400
pp_app.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, msoTrue
pp_app.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, msoTrue


'Title
    Set pp_textB = pp_slide.Shapes.AddTextbox( _
        msoTextOrientationHorizontal, 80, 30, 500, 50)

    With pp_textB.TextFrame
        .TextRange.Text = "xxx"
        .TextRange.ParagraphFormat.Alignment = ppAlignLeft
        .TextRange.Font.Size = 20
        .TextRange.Font.Name = "Calibri"
        .VerticalAnchor = msoAnchorMiddle
        .MarginLeft = 0
    End With

'Source
    Set pp_textB = pp_slide.Shapes.AddTextbox( _
        msoTextOrientationHorizontal, 80, 480, 400, 20)

    With pp_textB.TextFrame
        .TextRange.Text = "xxx"
        .TextRange.ParagraphFormat.Alignment = ppAlignLeft
        .TextRange.Font.Size = 11
        .TextRange.Font.Name = "Calibri"
        .VerticalAnchor = msoAnchorMiddle
        .MarginLeft = 0
    End With

 'Third Slide
Set pp_slide = pp_pres.Slides.Add(3, ppLayoutBlank)
pp_slide.Select

Excel.Sheets("Portfolio Comparison").ChartObjects("Comp_GR_YP").Activate
Excel.ActiveChart.ChartArea.Copy
pp_slide.Shapes.Paste.Select
pp_slide.Shapes(1).Width = 800
pp_slide.Shapes(1).Height = 400
pp_app.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, msoTrue
pp_app.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, msoTrue

'Title
    Set pp_textB = pp_slide.Shapes.AddTextbox( _
        msoTextOrientationHorizontal, 80, 30, 500, 50)

    With pp_textB.TextFrame
        .TextRange.Text = "xxx"
        .TextRange.ParagraphFormat.Alignment = ppAlignLeft
        .TextRange.Font.Size = 20
        .TextRange.Font.Name = "Calibri"
        .VerticalAnchor = msoAnchorMiddle
        .MarginLeft = 0
    End With

'Source
    Set pp_textB = pp_slide.Shapes.AddTextbox( _
        msoTextOrientationHorizontal, 80, 480, 400, 20)

    With pp_textB.TextFrame
        .TextRange.Text = "xxx"
        .TextRange.ParagraphFormat.Alignment = ppAlignLeft
        .TextRange.Font.Size = 11
        .TextRange.Font.Name = "Calibri"
        .VerticalAnchor = msoAnchorMiddle
        .MarginLeft = 0
    End With
 'Fourth Slide
Set pp_slide = pp_pres.Slides.Add(4, ppLayoutBlank)
pp_slide.Select

Excel.Sheets("Portfolio Comparison").ChartObjects("Comp_GR_PY").Activate
ActiveChart.ChartArea.Copy
pp_slide.Shapes.Paste.Select
pp_slide.Shapes(1).Width = 800
pp_slide.Shapes(1).Height = 400
pp_app.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, msoTrue
pp_app.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, msoTrue

'Title
    Set pp_textB = pp_slide.Shapes.AddTextbox( _
        msoTextOrientationHorizontal, 80, 30, 500, 50)

    With pp_textB.TextFrame
        .TextRange.Text = "xxx"
        .TextRange.ParagraphFormat.Alignment = ppAlignLeft
        .TextRange.Font.Size = 20
        .TextRange.Font.Name = "Calibri"
        .VerticalAnchor = msoAnchorMiddle
        .MarginLeft = 0
    End With

'Source
    Set pp_textB = pp_slide.Shapes.AddTextbox( _
        msoTextOrientationHorizontal, 80, 480, 400, 20)

    With pp_textB.TextFrame
        .TextRange.Text = "xxx"
        .TextRange.ParagraphFormat.Alignment = ppAlignLeft
        .TextRange.Font.Size = 11
        .TextRange.Font.Name = "Calibri"
        .VerticalAnchor = msoAnchorMiddle
        .MarginLeft = 0
    End With


 'Fifth Slide

Set pp_slide = pp_pres.Slides.Add(5, ppLayoutBlank)
pp_slide.Select

'Growth Chart
    Excel.Sheets("Portfolio").ChartObjects("Growth_port_").Activate
    Excel.ActiveChart.ChartArea.Copy
    pp_slide.Shapes.Paste.Select
    pp_slide.Shapes(1).Width = 600
    pp_slide.Shapes(1).Height = 400
    pp_app.ActiveWindow.Selection.ShapeRange.Align msoAlignLefts, msoTrue
    pp_app.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, msoTrue

    'Title
        Set pp_textB = pp_slide.Shapes.AddTextbox( _
            msoTextOrientationHorizontal, 80, 30, 500, 50)

        With pp_textB.TextFrame
            .TextRange.Text = "xxx"
            .TextRange.ParagraphFormat.Alignment = ppAlignLeft
            .TextRange.Font.Size = 20
            .TextRange.Font.Name = "Calibri"
            .VerticalAnchor = msoAnchorMiddle
            .MarginLeft = 0
        End With

    'Source
        Set pp_textB = pp_slide.Shapes.AddTextbox( _
            msoTextOrientationHorizontal, 80, 480, 400, 20)

        With pp_textB.TextFrame
            .TextRange.Text = "xxx"
            .TextRange.ParagraphFormat.Alignment = ppAlignLeft
            .TextRange.Font.Size = 11
            .TextRange.Font.Name = "Calibri"
            .VerticalAnchor = msoAnchorMiddle
            .MarginLeft = 0
        End With

 End Sub
 

Комментарии:

1. Скорее всего, ошибка синхронизации из-за низкой скорости ввода-вывода по сравнению с вашим VBA. Выполняйте поиск в режиме ожидания , ожидания и событий, чтобы замедлить работу кода во время критических операций.

2. Старайтесь также избегать утверждений .Select и. .Activate Это тоже вызывает хаос. Как правило, они вам не понадобятся.