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

vba excel-vba powerpoint powerpoint-vba office-2016

206 просмотра

2 ответа

13 Репутация автора

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

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

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

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

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

Автор: L. Kleiven Источник Размещён: 18.07.2016 03:01

Ответы (2)


0 плюса

48023 Репутация автора

С 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
Автор: David Zemens Размещён: 18.07.2016 03:11

0 плюса

1774 Репутация автора

В 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
Автор: mooseman Размещён: 15.12.2016 05:49
Вопросы из категории :
32x32