将 ChChart 控件链接到电子表格控件数据

Posted

技术标签:

【中文标题】将 ChChart 控件链接到电子表格控件数据【英文标题】:Linking ChChart control to Spreadsheet control data 【发布时间】:2013-12-15 19:41:32 【问题描述】:

我希望能够在 VBA 表单中嵌入图表控件,允许用户单击控件的某些部分,这将使用单击的 X 和 Y 值填充隐藏的电子表格。

我已经使用附加控件机制添加了“Microsoft Office Chat 11.0”和“Microsoft Office Spreadsheet 11.0”控件并将每个控件放置在表单上。但是,对于我的生活,我似乎无法将图表绑定到电子表格中包含的数据。我考虑的一种选择是

Dim SpdShtCtr As Spreadsheet
Dim ChartControl As ChChart

Dim XValues() As Variant, YValues() As Variant
XValues = WorksheetFunction.Transpose(SpdShtCtrl.Range("XValues"))
YValues = WorksheetFunction.Transpose(SpdShtCtrl.Range("YValues"))

Dim c
Set c = ChartControl.Constants

With ChartControl
    .Clear
    .Charts.Add
    With .Charts(0).SeriesCollection.Add
        .Caption = "Data"
        .SetData c.vbDimCategories, c.chDataLiteral, XValues
        .SetData c.vbDimValues, c.chDataLiteral, YValues
    End With
End With

问题在于它不是动态的 - 如果电子表格中的数据发生变化,图表将不会自动更新。此外,这不起作用。我在.SetData ... 上收到错误“对象不支持此属性或方法”

另一个选项是这样的

Dim SpdShtCtr As Spreadsheet
Dim ChartControl As ChChart

Dim XValues As Range, YValues As Range
Set XValues = SpdShtCtrl.Range("XValues")
Set YValues = SpdShtCtrl.Range("YValues")

Dim c
Set c = ChartControl.Constants

With ChartControl
    .DataSource = SpdShtCtrl
    .Clear
    .Charts.Add
    With .Charts(0).SeriesCollection.Add
        .Caption = "Data"
        .SetData c.vbDimCategories, c.chWORKSHEETRANGECONSTANT, XValues
        .SetData c.vbDimValues, c.chWORKSHEETRANGECONSTANT, YValues
    End With
End With

但我不知道这是否是将这些控件绑定在一起的正确方法,即使是,常量定义应该是什么,而不是WORKSHEETRANGECONSTANT,以定义到工作表范围的链接。

谁能指出我正确的方向?

【问题讨论】:

【参考方案1】:

我向用户窗体添加了一个 ChartSpace (=ChartSpace1) 和一个电子表格 (=Spreadsheet1),并这样做:

Private Sub UserForm_Initialize()
    Dim chc As ChChart

    With Spreadsheet1
        For i = 1 To 3 ' just filling sample Data to Spreadsheet
            .Cells(i, 1) = i
            .Cells(i, 2) = i + 2
        Next
    End With

    Set chc = ChartSpace1.Charts.Add
    chc.Type = chChartTypeScatterSmoothLineMarkers
    ChartSpace1.DataSource = Spreadsheet1 ' linking the Spreadsheet and the Chart

    chc.SeriesCollection.Add
    With chc.SeriesCollection(0)
        .SetData chDimSeriesNames, 0
        .SetData chDimCategories, 0
        .SetData chDimXValues, 0, "A1:A3" ' setting the x coordinate range
        .SetData chDimYValues, 0, "B1:B3" ' setting the y coordinate range
    End With
    chc.HasLegend = True
End Sub

对我有用,但我不知道这是否能满足您的所有需求。

【讨论】:

谢谢@MiVoth,这是一个很好的选择。不幸的是,第一个.SetData 调用对我来说失败了“运行时错误'5':无效的过程调用或参数”。这是我的代码:pastebin.com/YaebnCha。我编码的内容有何不同?我们都使用 11.0 版的控件吗? 取消那个,我有一些多余的代码,在工作中扔了一个扳手。这个样本完成了工作pastebin.com/HNGUwkba干得好@MiVoth

以上是关于将 ChChart 控件链接到电子表格控件数据的主要内容,如果未能解决你的问题,请参考以下文章

表格控件的常用表格控件简介

SpreadJS文章

WPF中常用的表格控件都有哪些

jquery中的dataTable表格控件中如何插入超链接或者按钮?

控件-Web控件:OWC控件

Gridview表格控件