更新多个图表系列名称

问题描述 投票:0回答:2

我正在尝试使用VBA更新图表图例中的系列名称。我尝试了两种方法,两种方法都有效。但是当我尝试在演示文稿中使用单击模式选择或修改数据时会出现问题。

1.

.Chart.SeriesCollection(1).Name = "Name 1"
.Chart.SeriesCollection(2).Name = "Name 2"

当我点击修改数据时,Serie1Serie2会自动更改图例。当只有一个系列设置了VBA时(即一条线被注释掉),就不会发生这种情况。

2.

.Chart.ChartData.Workbook.Worksheets(1).Range("B1").Value = "Name 1"
.Chart.ChartData.Workbook.Worksheets(1).Range("C1").Value = "Name 2"

这次,我无法打开Excel数据窗口。没有任何事情发生(没有错误或消息,但等待光标短暂出现)。

vba powerpoint powerpoint-vba
2个回答
0
投票

这可能不是您的完整答案,但可能有助于理解请求。

lea,你的with block似乎对于在PPT中工作是正确的,尽管你使用Excel有......一些问题。从你写的内容来看,有一个明显的细分:

.Chart.ChartData.Workbook.Worksheets(1).Range("B1").Value = "Name 1"

我的假设是你希望Excel范围B1是系列1的名称,C1是系列2.我相信你想要使用系列集合:

.SeriesCollection(1).Name = fpath & "\" & "[WorkbookName.xlsx]Sheet1!B1"
.SeriesCollection(2).Name = fpath & "\" & "[WorkbookName.xlsx]Sheet1!C1"

其中fpath是工作簿的文件夹路径。

我想知道为什么你没有在#2上得到错误(或者是你?如果是,请说明错误代码),除非你的代码中有On Error Resume Next或其他类型的错误处理。


EDIT1

修复Excel文件以根据图表系列名称的系列名称覆盖值(假设Excel文件已打开,否则打开它):

Workbooks("NAme").Sheets("Name").Range("B1").Value = .SeriesCollection(1).Name
Workbooks("NAme").Sheets("Name").Range("C1").Value = .SeriesCollection(2).Name

关于使用演示文稿选择/修改源数据,您能否将相关代码发布到您的帖子中以生成系列数据?取决于它的生成方式可能是一个问题(例如,如果你两次使用“new series(1)”,那可能是一个问题,等等)。


0
投票

这是一个例子(只需在演示文稿pptm中添加一个条形图):

Sub main()

With ActivePresentation.Slides(1).Shapes("CHT").chart
    .ChartData.Workbook.worksheets(1).Range("B4") = 999
    .ChartData.Workbook.worksheets(1).Range("B1").Value = "Name 1"
    .ChartData.Workbook.worksheets(1).Range("C1").Value = "Name 2"
End With

ActivePresentation.Save

End Sub

之后,如果您尝试单击以选择数据,则它不起作用(仅等待光标)。不确定(也许我只是做了错误的方式,这就是重点),但它看起来像一个错误,因为我试图再次运行它并有一个错误消息“方法工作簿对象chartdata失败”... Chartdata窗口似乎无法使用。

© www.soinside.com 2019 - 2024. All rights reserved.