gpt4 book ai didi

vba - 重复调用 Chart.SetSourceData 会出现错误 1004

转载 作者:行者123 更新时间:2023-12-01 16:25:40 25 4
gpt4 key购买 nike

我的公司使用 Excel 2003 创建的应用程序有问题。应用程序从源检索数据,并使用 VBA 例程中的 SetSourceData 更新图表,传递包含写入相关数据的单元格的范围。

该应用程序在 Office 2003 中运行良好,但在 Office 2010 中执行该应用程序时会出现以下错误:

Run-time error '1004': Method 'SetSourceData' of object'_Chart' failed.

我在 Office 2010 的一个简单 Excel 文件中创建了一个 For 循环,根据范围中传递给图表的列数,错误迟早会出现。 Range 中传递的列越多,它出现的越快。我想这与图表中的系列数有关(更多列更多系列)。

这是否是 Office 2010 中实现的图表对象或系列中的某种机制/缓冲区,而 Office 2003 中不存在?同样的 For 循环在 Office 2003 中运行时从未出现问题,而且我不确定如何解决此问题。

到目前为止,我只能删除控制错误的所有系列,使用 Goto 指令删除 SeriesCollection 中的所有系列,使用 For Each 循环选择 SeriesCollection 中的所有对象图表的。如果我这样做并在再次传递范围时恢复应用程序的执行,所有数据都会正确绘制在图表对象中。

重现错误的示例。以下代码将放入新的 Excel 2010 工作簿的 VBA 模块中。运行 Sub setDataChart,应用程序将运行,直到显示错误消息。

    Sub setDataChart()
Call createAColValues
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
ActiveChart.SetSourceData Source:=Range("A1:FA6"), PlotBy:=xlColumns
ActiveSheet.ChartObjects(1).Activate
With ActiveChart.Parent
.Height = 325
.Width = 900
.Top = 120
.Left = 10
End With
Call updateValues
Call sendData
End Sub

Sub sendData()
Dim cht As ChartObject
Set cht = ActiveSheet.ChartObjects(1)

'On Error GoTo delSeries:
For i = 0 To 1000
cht.Chart.SetSourceData Source:=ActiveSheet.Range("A1:FA6"), PlotBy:=xlColumns
Next i
End Sub

Sub createAColValues()
Range("A1").Select
ActiveCell.FormulaR1C1 = "1"
Range("A2").Select
ActiveCell.FormulaR1C1 = "2"
Range("A1:A2").Select
Selection.AutoFill Destination:=Range("A1:A6"), Type:=xlFillDefault
Range("A1:A6").Select
End Sub

Sub updateValues()
Range("B1").Select
ActiveCell.FormulaR1C1 = "=RANDBETWEEN(0,10)"
Range("B1").Select
Selection.AutoFill Destination:=Range("B1:B6"), Type:=xlFillDefault
Range("B1:B6").Select
Selection.AutoFill Destination:=Range("B1:FA6"), Type:=xlFillDefault
Range("B1:FA6").Select
End Sub

最佳答案

这并没有解决错误发生的原因。这是一个解决方法。

在调用SetSourceData之前,删除图表中当前所有现有系列,代码将按预期运行。

For j = cht.Chart.SeriesCollection.Count To 1 Step -1 
cht.Chart.SeriesCollection(j).Delete
Next j

我不确定为什么错误会首先发生,但这使它消失。

关于vba - 重复调用 Chart.SetSourceData 会出现错误 1004,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26503295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com