如何在图表工作表Excel VBA中更改图表的源数据

时间:2019-11-01 04:58:58

标签: excel vba dynamic charts

一起,

我正在尝试创建一个区域地图,以显示每个国家/地区的数据。数据由动态表提供。 我创建了一个图表表并将区域地图插入其中。 图表现在显示了当前国家/地区的数据,但我无法更改数据。 字符串mapInput是正确的,并且还显示了正确的Range。 例如:“ A4293:A4295,BJ4293:BJ4295”

错误1004出现在最后一行。

我也尝试了不使用“ Source:=“ 而且也没有“图表”

    l = Split(ws.Cells(lastRowR, lastColR - 2).Address, "$")(1)

    mapInput = "A" & lastRowR - 1 - cCount & ":A" & lastRowR - 1 & "," & l & 
    lastRowR - 1 - cCount & ":" & l & lastRowR - 1

    Sheets("map").ChartObjects(1).Chart.SetSourceData Source:=ws.Range(mapInput)

运行时错误1004“应用程序定义的错误或对象定义的错误”

2 个答案:

答案 0 :(得分:0)

如果使用图表表,请使用以下代码设置数据源:

Dim Cht As Chart
Set Cht = Charts("map")
Cht.SetSourceData ws.Range(mapInput)

确保mapInput代表正确的数据范围

注意:图表表不包含ChartsObject集合

答案 1 :(得分:0)

我没有解决您的确切问题,但是我建立了一个有效的示例。如果您正确指定了图表和数据范围,那么它应该对您有用。

我的工作表上有两个范围,一个名为MapInputNE,另一个名为MapInputSW。我有两个“ Filled Mpa”类型图表,一个嵌入在工作表中,另一个移到图表中。这些地图最初是从MapInputNE绘制数据的。

Map Data and Filled Map of New England

我写了一个通用例程来更改图表数据,无论它在哪里。向其提供图表和数据范围,并更新图表,并调整投影和映射级别。

Sub UpdateChartData(cht As Chart, rng As Range)
  With cht
    .SetSourceData Source:=rng
    With .SeriesCollection(1)
      .GeoProjectionType = xlGeoProjectionTypeMercator
      .GeoMappingLevel = xlGeoMappingLevelDataOnly
    End With
  End With
End Sub

然后,我制定了一些特定的例程来更改嵌入式地图或海图图纸以使用新英格兰或西南数据:

Sub UpdateEmbeddedChartDataNE()
  Dim cht As Chart
  Set cht = Worksheets("Sheet1").ChartObjects(1).Chart
  Dim rng As Range
  Set rng = Worksheets("Sheet1").Range("MapInputNE")
  UpdateChartData cht, rng
End Sub

Sub UpdateEmbeddedChartDataSW()
  Dim cht As Chart
  Set cht = Worksheets("Sheet1").ChartObjects(1).Chart
  Dim rng As Range
  Set rng = Worksheets("Sheet1").Range("MapInputSW")
  UpdateChartData cht, rng
End Sub

Sub UpdateChartSheetDataNE()
  Dim cht As Chart
  Set cht = Charts(1)
  Dim rng As Range
  Set rng = Worksheets("Sheet1").Range("MapInputNE")
  UpdateChartData cht, rng
End Sub

Sub UpdateChartSheetDataSW()
  Dim cht As Chart
  Set cht = Charts(1)
  Dim rng As Range
  Set rng = Worksheets("Sheet1").Range("MapInputSW")
  UpdateChartData cht, rng
End Sub

这些例程中的每个例程都定义了图表和数据范围,并将它们馈入第一个例程,然后相应的图表切换到所指示的数据源。

虽然我只在此处显示了嵌入式地图,但是在两张地图上都能很好地工作。

Map Data and Filled Map of Southwest US