在VBA中向图表对象添加自定义数据表

时间:2013-10-08 09:32:09

标签: vba excel-vba charts excel

我只是想知道是否有办法在VBA中的Chart-object中自定义DataTable的内容?即有没有办法改变表的内容不是实际的图表数据?请参见下图,其中 Pos EU (最左侧的图片)已更改为 OtherData1 OtherData2 (最右边的图片,显然也有表中的新数据。需要进入表格的数据可在范围对象中找到。

谢谢,

enter image description here

2 个答案:

答案 0 :(得分:2)

不幸的是,我无法摆脱数据表中引用数据的行,但我可以在数据表中添加更多行(仅限数字)

例:
graph with multiple lines in the data table

为此,我将所有行添加到图表的数据中,包括我想仅在数据表中显示的数据。
然后,我为那些我不想显示的数据行格式化为 Marker Fill :No Fill,以及 Line Color :No Line。这将使线条消失 然后,我调整了比例,使其看起来好像只绘制了一条数据线。

答案 1 :(得分:2)

这是一个巧妙的技巧,我使用了 lot 。它不会为您提供带边框的表格,您必须为该系列的名称添加文本框,但它允许您自定义图表下方“表格”中显示的内容。
首先,创建图表并为所有数据添加系列:

enter image description here

添加数据标签,然后格式化“其他数据”系列,以便没有行,标记/等。

enter image description here

然后,您可以使用这样的宏来调整数据标签相对于图表/绘图区域的位置。对于这个宏,我只是检查系列的行格式.Visible = msoFalse,但是你可以扩展该逻辑以满足你可能有的任何其他要求。

Sub Test()
Dim cht As Chart
Dim srs As Series
Dim p As Long
Dim dl As DataLabel
Dim dlTop As Double
Dim s As Long
Application.ScreenUpdating = False
Set cht = ActiveSheet.ChartObjects(1).Chart
For Each srs In cht.SeriesCollection
    If srs.Format.Line.Visible = msoFalse Then
        s = s + 1
        srs.DataLabels.Position = xlLabelPositionCenter
        For p = 1 To srs.Points.Count
            Set dl = srs.DataLabels(p)
            dlTop = cht.PlotArea.Height + cht.PlotArea.Top + (s * dl.Height)
            dl.Select
            dl.Top = dlTop
        Next
    End If
Next
Application.ScreenUpdating = True
End Sub

结果应该是这样的:

enter image description here