Страницы: 1
RSS
Создание пустой диаграммы (VBA)
 
Добрый день, форумчане!
Подскажите, есть ли возможность создать пустую диаграмму средствами VBA?

Дело в том, что на листе очень много данных и выдается ошибка о невозможности создания диаграммы (The maximum number of data series per chart is 255). Выделять ячейки заранее не хочется.

В планах сделать так:
1. Получить объект диаграмм, что-то вроде
                     Set myChart = ActiveSheet.Shapes.AddChart()
                     только без привязки к ячейкам или что-то вроде:
                      Set myChart = ActiveSheet.Shapes.AddChart("A1:A1") - но такого конструктора, как я понял, нет.
2. Затем создать массивы с данными и присвоить эти данные диаграмме.

Проблема именно в получении объекта (пустой диаграммы).
 
Set myChart = ActiveSheet.ChartObjects.Add(left, top, width, height)
Справка Excel VBA
F1 творит чудеса
 
Вот так можно:
Код
Sub tet()
Dim sh As Worksheet
Set sh = ActiveSheet
Dim cht As ChartObject
Set cht = sh.ChartObjects.Add(50, 40, 400, 200)
End Sub
С уважением,
Федор/Все_просто
 
Доброе время суток
Так тут, коллеги, проблема в получение пустой диаграммы. Если активная ячейка стоит в области данных, то автоматом график заполняется чем-то по усмотрению Excel. Как вариант, перейти в правый нижний, создать, а потом вернуться в левый верхний.
Код
Public Sub CreateChart()
    Dim pChart As Chart
    ActiveSheet.Cells(ActiveSheet.Rows.Count, ActiveSheet.Columns.Count).Select
    Set pChart = ActiveSheet.Shapes.AddChart(XlChartType.xlXYScatter, 1, 1, 200, 200).Chart
    ActiveSheet.Range("A1").Select
End Sub

У каждого свой стиль создания диаграмм;)
Успехов.
 
Андрей, Вы правы и верно понимаете мою мысль, можно  и так выкрутиться, и две любые ячейки выделить перед построением. Но это хочу на крайний случай оставить. Еще вечер помучаюсь)) Просто интересно, неужели в Microsoft не определили конструктор пустой диаграммы. А код Максима я еще утром пробовал. Ошибка при построении, так как верно было замечено, что Excel при построении диаграммы сам определяет диапазоны данных для построения.
Изменено: Palsanich - 21.04.2015 17:08:56
 
Set myChart = ActiveSheet.ChartObjects.Add(left, top, width, height)

Максим, спасибо за совет! Но если заполнить лист (хотя бы 300 строк и 300 столбцов) любыми значениями. То при построении выдается ошибка. Не может Excel справиться с таким диапазоном.
Изменено: Palsanich - 21.04.2015 17:09:53
 
Не проверял, но кажется, если заключить в блок
Код
on error resume next 
...(код с диаграммой)
...(здесь обнуляем ресурсный диапазон)
err.clear 'необязательно, но на всякий случай
on error goto 0
то можно обойтись и через shapes.addchart как в первом сообщении.
С уважением,
Федор/Все_просто
 
ну не зна... всё работает, по совету Андрей VG,
Код
With ActiveSheet
    Cells(.UsedRange.Rows.Count + 2, .UsedRange.Columns.Count + 2).Select
    Set myChart = .ChartObjects.Add(50, 40, 200, 100)
End With
Цитата
Palsanich написал:
неужели в Microsoft не определили конструктор пустой диаграммы.
это он и есть:
Код
myChart.Chart.ChartWizard ...

Просто приходится учитывать вот эту его страсть кинуться на диапазон и запихать его в диаграмму сразу. Ибо сделано всё для блага простого юзера, а макрописцы как-нибудь сообразят :)
F1 творит чудеса
 
Пробовал разные комбинации, в итоге выкладываю тестовый файл, 2 макроса рабочих. А вот макрос с использованием

on error resume next
...(код с диаграммой)
...(здесь обнуляем ресурсный диапазон)

не позволяет присвоить объект переменной.

Всем спасибо за помощь!!!
 
можно еще на пустом листе создавать:
Код
Sub q()
With Application
    .DisplayAlerts = False
    .ScreenUpdating = False
End With
With Sheets.Add
    .ChartObjects.Add(1, 1, 100, 100).Chart.Location Where:=xlLocationAsObject, Name:="Лист1"
    .Delete
End With
End Sub
Живи и дай жить..
Страницы: 1
Наверх