ОШИБКА при попытке сделать диаграмму в Excel Macro - PullRequest
1 голос
/ 03 мая 2020

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

enter image description here

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

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

Это, например, аккуратнее и легче изменить:

Dim shp As Shape, cht As Chart

'get a reference to the added shape
Set shp = ActiveSheet.Shapes.AddChart2(240, xlXYScatter)
shp.Left = 100  '<< better than using IncrementXXX methods
shp.Top = 100
shp.Height = 300
shp.Width = 400

'get a reference to the contained Chart object
Set cht = shp.Chart
cht.SetSourceData Sheets("Sheet6").Range("F10:F41,H10:H41")
cht.SetElement msoElementPrimaryCategoryAxisTitleAdjacentToAxis
cht.SetElement msoElementPrimaryValueAxisTitleAdjacentToAxis
0 голосов
/ 04 мая 2020

ваш макрос выполняет процесс до линии, в которой он перемещает график вправо. В следующем операторе переместите диаграмму на большее количество точек, чем позволяют листы. От положения по умолчанию, в котором Excel вставляет график, есть только 47 точек вверх. Попробуйте изменить значение «-94,8» на один ближе к 0, и вы увидите, что ваш макрос теперь выполняется.

Например, этот макрос работает нормально, перемещая график на 47 пунктов вверх («IncrementTop -47.01»), но если значение изменилось на 90 пунктов, макрос выдаст ошибку

Sub ProbingChart()
ActiveSheet.Shapes.AddChart2(227, xlLine).Select
Application.CutCopyMode = False
ActiveChart.SetSourceData Source:=Sheets("data").Range("A1:A12,D1:D12")
ActiveSheet.Shapes("Gráfico 1").IncrementLeft 0.75
ActiveSheet.Shapes("Gráfico 1").IncrementTop -47.01
ActiveSheet.Shapes("Gráfico 1").IncrementLeft 244.5
ActiveSheet.Shapes("Gráfico 1").IncrementLeft -559.5
ActiveSheet.Shapes("Gráfico 1").IncrementTop 102.75
Range("A1").Select
End Sub

Я надеюсь, что помог

С уважением

...