Błąd automatyzacji Katastrofalna awaria


-1

Próbuję użyć programu Excel VBA do skopiowania niektórych wykresów do slajdów Powerpoint przy użyciu poniższych kodów, ale wyświetla błąd „Błąd automatyzacji katastrofalny błąd”. Nie mogę ustalić, na czym polega problem. Zastanawiam się, czy rozmiar pliku programu Excel jest zbyt duży. jak mogę rozwiązać problem?

Sub ExcelToPres()
Dim PPT As Object
Set PPT = CreateObject("PowerPoint.Application")
PPT.Visible = True
PPT.Presentations.Open Filename:="C:\test\test.pptx"
copy_chart "Sheet1", 2  ' Name of the sheet to copy graph and slide number the graph is to be pasted in
PPT.Save
PPT.Close
End Sub


Public Function copy_chart(sheet, slide)


Dim PPApp As Object
Dim PPPres As Object
Dim PPSlide As Object

Set PPApp = CreateObject("Powerpoint.Application")


Set PPApp = GetObject(, "Powerpoint.Application")
Set PPPres = PPApp.ActivePresentation
'PPApp.ActiveWindow.ViewType = ppViewSlide
PPApp.ActiveWindow.View.GotoSlide (slide)

Worksheets("Sheet1").Activate
ActiveSheet.ChartObjects("Chart 13").Chart.CopyPicture _ ****
Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture 


'PPApp.ActiveWindow.View.GotoSlide PPSlide.SlideIndex

Set PPSlide = PPPres.Slides(PPApp.ActiveWindow.Selection.SlideRange.SlideIndex)
With PPSlide
' paste and select the chart picture
.Shapes.Paste.Select
' align the chart
PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
End With

' Clean up
Set PPSlide = Nothing
Set PPPres = Nothing
Set PPApp = Nothing

End Function

Która linia generuje błąd? Czy próbowałeś mniejszego pliku Excela (aby ustalić, czy twoje podejrzenia są słuszne, czy złe)?
Ƭᴇcʜιᴇ007

Odpowiedzi:


0

Jedna lub druga z twoich procedur powinna wywoływać PPT i uzyskiwać obiekt PPT do pracy, a nie oba.

Jedną rzeczą, od której od razu jestem podejrzliwy, jest to, że procedura czyszczenia w copy_chart zamyka obiekt aplikacji PPT, więc gdy kontrola powraca do podprogramu wywołującego, obiekt jest zerowy. Jeśli błąd wystąpi w wierszu „PPT.Save”, włożę na niego pieniądze. ;-)

W każdym razie w opublikowanym kodzie są inne rzeczy, które są złą praktyką. Nigdy nie wybieraj niczego w PPT, chyba że jest to konieczne, na przykład. Zamiast tego użyj odwołań do obiektów. Zrobiłem mnóstwo modyfikacji do twojego przykładowego kodu, ale nie przetestowałem go tutaj; weź to za to, co jest warte, ale spróbuj.

Sub ExcelToPres()
Dim PPT As Object
Dim PPTPres as Object
Set PPT = CreateObject("PowerPoint.Application")
PPT.Visible = True
Set PPTPres = PPT.Presentations.Open Filename:="C:\test\test.pptx"
copy_chart "Sheet1", 2, PPTPres  ' Name of the sheet to copy graph and slide number the graph is to be pasted in
PPTPres.Save
PPTPres.Close
' optionally
PPT.Quit

End Sub


Public Function copy_chart(sheet as String, lSlide as Long, PPTPres as Object)

Dim PPSlide As Object
Dim PPShapeRange as Object

Worksheets("Sheet1").Activate
ActiveSheet.ChartObjects("Chart 13").Chart.CopyPicture _ ****
Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture 

Set PPSlide = PPTPres.Slides(lSlide)

With PPSlide
' paste and select the chart picture
set PPShapeRange = .Shapes.Paste

' align the chart
With PPShapeRange
.Align msoAlignCenters, True
.Align msoAlignMiddles, True
End With


End Function
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.