Как разместить несколько диаграмм на листе диаграммы, как я могу изменить свойства диаграммы, используя vba? - PullRequest
0 голосов
/ 24 января 2012

Я могу разместить несколько диаграмм на листе диаграммы, создав пустой лист диаграммы, а затем установив расположение диаграмм на этот пустой лист диаграммы.

'This creates multiple charts within a single chart sheet!

Charts.Add 'Creates empty chart page when empty cell is selected

'Keep track of chart page for later reference
Dim chartSheet As String
chartSheet = ActiveChart.Name

.... 'Create three separate charts with data here

'Now place these charts within our empty chart page

Set chart1 = chart1.Location(Where:=xlLocationAsObject, Name:=chartSheet)
Set chart2 = chart2.Location(Where:=xlLocationAsObject, Name:=chartSheet)
Set chart3 = chart3.Location(Where:=xlLocationAsObject, Name:=chartSheet)

Весь код работает доэта точка.Лист диаграммы содержит все 3 диаграммы, хотя диаграммы все перекрываются.Когда я пытаюсь настроить положение диаграмм ...

'This code fails to run!
chart1.Parent.Top = 0
chart1.Parent.Left = 0

Код возвращает ошибку времени выполнения Объект не поддерживает это свойство или метод .Я знаю, что можно перемещать графики вручную, щелкая и перетаскивая, и я знаю, что приведенный выше код работает, если диаграмма находится в пределах обычной рабочей таблицы.Но по какой-то причине этот код не работает, когда диаграммы находятся в диаграмме.Есть ли способ заставить VBA делать то, что я хочу?

Спасибо за помощь.

1 Ответ

0 голосов
/ 25 января 2012

После небольшого количества экспериментов я полагаю, что ваш код не работает, потому что 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

Оттуда вы сможете перемещать, форматировать и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...