我正在尝试为打开的excel文件中的每个图表在现有的powerpoint演示文稿中添加silde。VBA不断抛出错误。在这里,我一直得到一个错误,对象不支持方法,而在这里,ActiveChart.ChartArea.Copy没有设置pptApp.ActivePresentation.Add变量。
是不是就像它看起来那样无望?
Option Explicit
#Const EARLYBINDING = False
Sub CopyAndLinkAllChartsToExistingPPT()
#If EARLYBINDING Then
Dim pptApp As PowerPoint.Application
Dim pptPres As PowerPoint.Presentation
Dim pptSlide As PowerPoint.Slide
#Else
Dim pptApp As Object
Dim pptPres As Object
Dim pptSlide As Object
Const ppLayoutTitle = 1
#End If
Dim workS As Worksheet
Dim chartS As Excel.ChartObjects
Dim workS_Count As Integer
Dim chartS_Count As Integer
Dim W As Integer
Dim C As Integer
'Declaring PPT objects
Set pptApp = GetObject(, "PowerPoint.Application")
Set pptPres = pptApp.Presentations.Add(msoTrue)
Set pptSlide = pptPres.Slides.Add(1, ppLayoutTitle)
'Declaring Excel objects
Set workS = ActiveWorkbook.worksheets(1)
Set chartS = workS.ChartObjects
'Amount of worksheets and charts for the loops
workS_Count = ActiveWorkbook.worksheets.Count
chartS_Count = workS.ChartObjects.Count
'Nested loop for all the worksheets and charts
For W = 1 To workS_Count
For C = 1 To chartS_Count
pptApp.ActivePresentation.Add
pptApp.ActivePresentation.Slides.Count 1, ppLayoutTitle
pptApp.ActiveWindow.View.GotoSlide
pptApp.ActivePresentation.Slides.Count
Set pptSlide = pptApp.ActivePresentation.Slides(pptApp.ActivePresentation.Slides.Count)
chartS.Select
ActiveChart.ChartArea.Copy
'Pasting chart in PowerPoint slide with a data link
pptSlide.Shapes.PasteSpecial link:=msoTrue
Next C
Next W
' Clearing the objects
Set pptApp = Nothing
Set pptPres = Nothing
Set pptSlide = Nothing
Set workS = Nothing
Set chartS = Nothing
End Sub发布于 2016-02-12 21:06:43
我认为你在添加幻灯片的时候把所有的东西都搞错了。您已经创建了一个演示文稿,所以您只需要添加幻灯片和粘贴图表,对吗?您在循环中所做的(也是错误的)是为需要粘贴的每个图表添加一个新的演示文稿,然后在其中添加一个幻灯片。
试着简化它:
For W = 1 To workS_Count
For C = 1 To chartS_Count
Set pptSlide = pptPres.slides.add(pptPres.slides.count, ppLayoutTitle)
chartS(chartS_Count).Select
ActiveChart.ChartArea.Copy
'Pasting chart in PowerPoint slide with a data link
pptSlide.Shapes.PasteSpecial link:=msoTrue
Next C
Next Whttps://stackoverflow.com/questions/35362682
复制相似问题