Как изменить исходные данные для диаграммы в виде диаграммы Excel vba - PullRequest
0 голосов
/ 01 ноября 2019

все вместе,

Я пытаюсь создать диаграмму региональной карты, которая показывает данные по стране. Данные представлены динамической таблицей. Я создал лист диаграммы и вставил в него карту региональной карты. Диаграмма теперь показывает данные для текущих стран, но я не могу изменить данные. Строка mapInput является правильной, а также показывает правильный диапазон. Например: «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 голосов
/ 05 ноября 2019

Я не смог точно решить вашу проблему, но я создал рабочий пример. Если вы правильно указали свою диаграмму и диапазон данных, он должен работать для вас.

У меня есть два диапазона на моем листе, один с именем MapInputNE, а другой MapInputSW. У меня есть две диаграммы типа «Заполненный 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

0 голосов
/ 01 ноября 2019

Если вы используете Chart Sheet, используйте следующий код для установки источника данных:

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

Убедитесь, что mapInput представляет правильный диапазон данных

Примечание: Chart Sheet не содержит ChartsObject коллекция

...