Редактировать исходные данные в диаграмме Embedde Office 2016

Я пытаюсь отредактировать исходные данные в предварительно отформатированную каскадную диаграмму в PowerPoint. Однако код дает сбой при попытке доступа к свойству .ChartData.Workbook.

Код вылетает на первой строке:

Set wbChart = cfSlide.Shapes("CFChart").chart.ChartData.Workbook Set wsChart = wbChart.Worksheets(1)

Код отлично работает на старых графиках.

Заранее спасибо.


person L. Kleiven    schedule 18.07.2016    source источник
comment
Я не завидую вам из-за всех неприятностей, которые доставила вам водопадная диаграмма. Вы должны попытаться получить бесплатный год офиса от Microsoft за все ваши проблемы: P   -  person RGA    schedule 18.07.2016


Ответы (2)


С 2007 года я считаю необходимым Activate рабочую тетрадь. Это действительно ужасный дизайн/реализация, но по моему опыту это необходимо.

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 для минимального прерывания пользовательского интерфейса. Мне нравится сразу сворачивать его и закрывать, когда закончите, что вы можете сделать wbChart.Close

Я думаю, что где-то читал, что этого можно избежать, используя блок With, но мне не удалось это успешно реализовать, например:

With cfSlide.Shapes("CFChart").chart.ChartData.Workbook
    Set wsChart = .Worksheets(1)
    ' etc...

End With
person David Zemens    schedule 18.07.2016

В 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
person mooseman    schedule 15.12.2016