将 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 控件链接到电子表格控件数据的主要内容,如果未能解决你的问题,请参考以下文章