为了响应机器人请求添加更多代码以便其他人可以更好地理解我的问题,请在下面查看一个基本的独立例程,其中包含上下文中有关“SetSourceData”的问题行(您可以自己尝试使用它)。
注意:我使用此基本例程的测试 PowerPoint 数据文件有 (i) 只有一张幻灯片和 (ii) 该幻灯片上唯一的东西是条形图 - 没有其他形状。
重申我的目标:能够动态设置图表范围。但是,我通过指定单元格范围使用的方法会因“自动化错误(错误 440)”的无用诊断而使例程崩溃
仅供参考,我也尝试过这种格式:
Mychart.SetSourceData Source:="='Sheet1'!$A$1:$M$4"
虽然这种格式对于动态更改范围没有用,但我只是想看看会发生什么。
结果如下:
- 当我在大约 12 年前创建的一个非常古老的 PowerPoint 文件上对其进行测试时,它确实成功地更改了图表范围。但是,它还 (i) 切换了行/列,以及 (ii) 更改了图表中所有条形的颜色。
- 当我在我今天创建的 PowerPoint 文件上测试它时,使用完全相同类型的条形图和完全相同的数据,它并没有改变图表范围 - 但至少它没有完全重新排列图表!!
去看看。
反正我说过,这种格式对于动态改变图表范围是没用的。
请参阅下面的完整基本例程 - 您可以提供任何帮助来解决 SetSourceData 问题,我们将不胜感激!
Sub Demo()
Dim MySlide As Slide
Dim Mychart As Chart
Dim my_Filename As String
Dim LastRow As Integer
Dim Last_num_col As Integer
'Get filename from user and open PowerPoint file
MsgBox "Browse to find your presentation. . .", , "DEMO VBA"
'Get filename from user
With Application.FileDialog(msoFileDialogFilePicker)
.Filters.Clear
.Filters.Add "PowerPoint Files", "*.ppt, *.pptx"
.AllowMultiSelect = False
If .Show = True Then my_Filename = .SelectedItems(1)
End With
Presentations.Open my_Filename
Set MySlide = ActivePresentation.Slides(1)
Set Mychart = MySlide.Shapes(1).Chart
Mychart.Select
Mychart.ChartData.Activate
Set Myworksheet = Mychart.ChartData.Workbook.Worksheets(1)
LastRow = 4
Last_num_col = 13
Mychart.SetSourceData _
Source:="=Myworksheet.Range(Cells(1,1),Cells(LastRow,Last_num_col))"
Mychart.ChartData.Workbook.Close
my_Filename = "Updated.pptx"
ActivePresentation.SaveAs Filename:=my_Filename
ActivePresentation.Close
End Sub