Как мне создавать графики в Excel, используя VBA? - PullRequest
0 голосов
/ 22 мая 2019

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


Базовый поиск в Google дает множество руководств, следующие примеры:

https://peltiertech.com/Excel/ChartsHowTo/QuickChartVBA.html

https://www.thespreadsheetguru.com/blog/2015/3/1/the-vba-coding-guide-for-excel-charts-graph

... и поиск по переполнению стека и просмотр страниц справки Microsoft дают определенную информацию. Тем не менее, кажется, есть несколько способов создания графиков с использованием VBA, и я изо всех сил пытаюсь понять нюансы в различных примерах кода.


Например, я сомневаюсь, какие переменные мне следует использовать для диаграммы. Каковы могут быть последствия использования Dim cht As Chart в отличие от As Shape или As ChartObject? Я полагаю, что это может дать информацию о выражениях, которые я хотел бы использовать для создания фактического графа, который, согласно примерам, кажется, включает:

Set cht = ws.Shapes.AddChart2(201, xlColumnClustered)

Или:

ws.ChartObjects.Add(*Left, Top, Width, Height*)

Или:

Set chtSht = Charts.Add

... Все они кажутся совершенно разными, и я, в конечном счете, не понимаю, для чего служат различия.

У меня есть догадка, это в основном связано с тем, встроены ли диаграммы или нет, хотя я не уверен, в какой степени это сообщит код.

Итак, для тех, кто более опытен, чем я, и, вероятно, может решить эти проблемы более эффективно, чем я могу переварить результаты поиска Google: Как мне следует создавать графики в Excel с использованием VBA?

1 Ответ

1 голос
/ 24 мая 2019

Существует четыре синтаксиса для добавления встроенной диаграммы на лист.Сначала я перечислю их самые старые.

Самым старым способом, добавляет лист с диаграммой, а затем помещает лист с диаграммой на лист.Не используйте его, он устарел.

Charts.Add
ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"

Таким образом ChartObject добавляется непосредственно на лист.ChartObject - это особый вид фигуры, который включает диаграмму.Это добавляет диаграмму по умолчанию (кластеризованный столбец, если вы не определили другое значение по умолчанию), используя размеры и позиции в скобках (которые требуются).Он возвращает ChartObject.

ActiveSheet.ChartObjects.Add(Left, Top, Width, Height)

В Excel 2007 введен этот синтаксис, который включает в себя тип диаграммы (если опущен, вы получаете тип по умолчанию) и положение и размер (если опущено, диаграмма является размером по умолчанию, 35 дюймов, в центре активного окна).Он возвращает форму.

ActiveSheet.Shapes.AddChart(XlChartType, Left, Top, Width, Height)

В Excel 2013 введен другой синтаксис, который также включает стиль диаграммы в дополнение к другим параметрам и который также возвращает форму.

ActiveSheet.Shapes.AddChart2(Style, XlChartType, Left, Top, Width, Height)

Iхотел бы использовать AddChart2 все время, но я по-прежнему поддерживаю пользователей Excel 2010, поэтому я должен использовать AddChart.У меня есть подпрограмма, которая ищет стиль по умолчанию для данного типа диаграммы, поэтому я могу применить его в Excel 2013+ для имитации AddChart2.Вероятно, нет причин использовать ChartObjects.Add сверх AddChart или AddChart2;не нужно переписывать код, если он работает, но не используйте его в новом коде.

Что вам нужно сделать, это объявить переменную типа Chart и установить ее следующим образом:

Dim cht As Chart

Set cht = ActiveSheet.ChartObjects.Add(100, 100, 360, 216).Chart

Set cht = ActiveSheet.Shapes.AddChart(xlXYScatterLines, 100, 100, 360, 216).Chart

Set cht = ActiveSheet.Shapes.AddChart2(240, xlXYScatterLines, 100, 100, 360, 216).Chart

Теперь вы можете выполнять дальнейшие операции на графике, присвоенном cht.

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