После небольшого количества экспериментов я полагаю, что ваш код не работает, потому что chart1
- это его собственная рабочая таблица.
Когда я углубился в выбранный график, я заметил следующую разницу. Если диаграмма встроена (объект на другом листе), Parent
- это Object/ChartObject
, который имеет свойства Top
и Left
(это относительное расположение на листе). Если диаграмма является собственной рабочей таблицей, Parent
на самом деле представляет собой свойства Object/Thisworkbook' which does not have
Top or
Left '. Это имеет смысл, потому что при создании chartSheet диаграмма заполняет всю область листа и, таким образом, не может иметь относительного положения.
Если вы вставите точку останова в chart1.Parent.Top = 0
и просмотрите местных жителей .... вы увидите то, что я объяснил выше.
РЕДАКТИРОВАТЬ: предложить что-то, повторяющее ваш запрос в комментариях.
Дочерние элементы содержатся в коллекции «Shapes» объекта листа. я использовал следующее, чтобы показать имена всех фигур на листе
For i = 1 To ActiveWorkbook.ActiveSheet.Shapes.Count
temp = temp & i & " " & ActiveWorkbook.ActiveSheet.Shapes(i).Name & vbCr
Next
MsgBox temp
Оттуда вы сможете перемещать, форматировать и т. Д.