我正在尝试将源数据编辑为 PowerPoint 中预先格式化的瀑布图。但是,尝试访问 .ChartData.Workbook 属性时,代码会崩溃。
代码在第一行崩溃:
Set wbChart = cfSlide.Shapes("CFChart").chart.ChartData.Workbook
Set wsChart = wbChart.Worksheets(1)
该代码在旧图表上完美运行。
提前致谢。
我正在尝试将源数据编辑为 PowerPoint 中预先格式化的瀑布图。但是,尝试访问 .ChartData.Workbook 属性时,代码会崩溃。
代码在第一行崩溃:
Set wbChart = cfSlide.Shapes("CFChart").chart.ChartData.Workbook
Set wsChart = wbChart.Worksheets(1)
该代码在旧图表上完美运行。
提前致谢。
Activate
从2007年起,我相信工作簿是很有必要的。这是一个非常糟糕的设计/实现,但根据我的经验,这是必要的。
cfSlide.Shapes("CFChart").chart.ChartData.Workbook.Activate
Set wbChart = cfSlide.Shapes("CFChart").chart.ChartData.Workbook
wbChart.Application.WindowState = -4140 '## Minimizes Excel
Set wsChart = wbChart.Worksheets(1)
这变得很讨厌,因为你必须最小化它和/或.Close
最小化 UI 中断。我喜欢立即最小化它,完成后关闭它,你可以这样做wbChart.Close
我想我在其他地方读到过,您可以通过使用With
块来避免这种情况,但我无法成功实现,例如:
With cfSlide.Shapes("CFChart").chart.ChartData.Workbook
Set wsChart = .Worksheets(1)
' etc...
End With
在 2016 年,Powerpoint 可以访问图表(不是 Excel 嵌入对象)背后的数据 XLWorkbook 是保存新数据的 Excel 文件
For Each oSH In ActivePresentation.Slides(2).Shapes
With oSH.Chart.ChartData
'this updates the values in the datasheet
.Workbook.sheets(1).Range("A1:B" & lastrow ).Value = xlWorkBook.sheets(2).Range("A3:B" & lastrow).Value
End With