【问题标题】:Using SetSourceData使用 SetSourceData
【发布时间】:2022-01-03 03:39:17
【问题描述】:

我是一个使用 PowerPoint VBA 的新手!

我想使用 SetSourceData 更改图表的数据范围。

我使用的变量如下:

  • 相关活动图表设置为变量Mychart
  • 与图表关联的工作表设置为变量 Myworksheet
  • 两个名为 LastRow 和 Last_num_col 的范围变量以编程方式设置。

所有这些变量在 VBA 例程的其他各种代码行中都可以正常工作。

要重新设置图表数据的范围,我正在使用以下代码行,但它不起作用并使我的 VBA 例程崩溃:

Mychart.SetSourceData Source:="=Myworksheet.Range(Cells(1,1),Cells(LastRow,Last_num_col))"

任何建议将不胜感激。

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: vba powerpoint


【解决方案1】:

为了响应机器人请求添加更多代码以便其他人可以更好地理解我的问题,请在下面查看一个基本的独立例程,其中包含上下文中有关“SetSourceData”的问题行(您可以自己尝试使用它)。

注意:我使用此基本例程的测试 PowerPoint 数据文件有 (i) 只有一张幻灯片和 (ii) 该幻灯片上唯一的东西是条形图 - 没有其他形状。

重申我的目标:能够动态​​设置图表范围。但是,我通过指定单元格范围使用的方法会因“自动化错误(错误 440)”的无用诊断而使例程崩溃

仅供参考,我也尝试过这种格式:

Mychart.SetSourceData Source:="='Sheet1'!$A$1:$M$4"

虽然这种格式对于动态更改范围没有用,但我只是想看看会发生什么。

结果如下:

  1. 当我在大约 12 年前创建的一个非常古老的 PowerPoint 文件上对其进行测试时,它确实成功地更改了图表范围。但是,它还 (i) 切换了行/列,以及 (ii) 更改了图表中所有条形的颜色。
  2. 当我在我今天创建的 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

【讨论】:

    猜你喜欢
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-06
    • 2018-08-03
    • 1970-01-01
    相关资源
    最近更新 更多