#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
Это тоже вызывает хаос. Как правило, они вам не понадобятся.