Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/64: Рейтинг темы: голосов - 64, средняя оценка - 4.52
32 / 29 / 1
Регистрация: 06.01.2017
Сообщений: 297
1

Внедрение диаграмм

09.12.2017, 01:10. Показов 12843. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В Excel"е есть два типа - Charts и ChartObjects.

Как я понял, разница в том, что Charts это Диаграмма-Лист, а ChartObjects это Диаграмма на Листе.

Добавляется Диаграмма-на-Листе вот так:

Visual Basic
1
ActiveSheet.Shapes.AddChart2(240, xlXYScatterLinesNoMarkers).Select
Это получено автоматической генерацией при записи макро.

Отсюда два вопроса:
1. Откуда там взялось Select
2. Как получить ссылку на вновь созданный объект?

На первый вопрос ответ, в общем-то, ясен - объект создается и на него наводится фокус, отчего он становится ActiveChart.
Тип у него Chart

Скорее всего, ссылка так и получается
Visual Basic
1
2
Dim cho As Chart
Set ChO = ActiveChart
Но вопросы остаются.

Например, чем отличаются свойства:
SeriesCollection и FullSeriesCollection
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2017, 01:10
Ответы с готовыми решениями:

Построение диаграмм в VBA
Помогите с выполнением задания, совершенно не помню как делается((( Сделайте так, чтобы при...

Автоматическое построение диаграмм
Добрый вечер . Есть необходимость строить диаграммы на основе большой таблицы . В таблице более...

Нумерация диаграмм на листе
Добрый день! Не могу понять принцип нумерации диаграмм. На моём листе (листов много, но работаю с...

Access - внедрение переменной в запрос
необходимо в запросе перебрать много значений с фиксированным шагом. идея как бы проста - делаю...

27
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
18.12.2017, 07:51 21
Author24 — интернет-сервис помощи студентам
Visual Basic
1
Set ChO = ActiveSheet.ChartObjects.Add(ActiveCell.Left, ActiveCell.Top, 300, 300)
0
32 / 29 / 1
Регистрация: 06.01.2017
Сообщений: 297
18.12.2017, 15:29  [ТС] 22
работает!
Собственно, я и сам так делал, но не вставало куда надо.
Ошибка моя заключалась в том, что я думал, что при срабатывании RefEdit выбранная ячейка сама собой активируется, а она, оказывается не активируется, активной ячейкой остаётся та, где курсор стоял до запуска формы с RefEdit.
Теперь я принудительно активирую нужную ячейку и всё работает как надо.

Благодарствую!
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
19.12.2017, 17:55 23
В случае с RefEdit также нет необходимости в активации,

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub CommandButton1_Click()
    If TypeOf Evaluate(RefEdit1.Value) Is Range Then
       With Application.Range(RefEdit1.Value)
            .Worksheet.ChartObjects.Add .Left, .Top, 300, 300
            Me.Caption = "Выбран " & .Address(, , , True)
       End With
    Else
       Me.Caption = "Выберите ориентир для диаграммы"
    End If
End Sub
0
32 / 29 / 1
Регистрация: 06.01.2017
Сообщений: 297
19.12.2017, 22:50  [ТС] 24
Не знал про функцию Evaluate, надо будет изучить
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
20.12.2017, 18:28 25
Вариант без Evaluate

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub CommandButton1_Click()
    On Error Resume Next
    Dim c As Range
    Set c = Application.Range(RefEdit1)
    If Not c Is Nothing Then
       c.Parent.ChartObjects.Add c.Left, c.Top, 300, 300
       Caption = "Выбран " & c.Address(External:=True)
    Else
       Caption = "Выберите ориентир для диаграммы"
    End If
End Sub
0
32 / 29 / 1
Регистрация: 06.01.2017
Сообщений: 297
20.12.2017, 18:48  [ТС] 26
Нет, я понял, нормально всё.

Активировать или нет ячейку - это конкретика.
Когда надо, когда не надо
0
32 / 29 / 1
Регистрация: 06.01.2017
Сообщений: 297
07.02.2018, 23:23  [ТС] 27
pashulka, помогите ещё раз!
Дело в том, что мой комп пал жертвой обновлений Windows 10, так что пришлось форматировать диск и устанавливать заново Windows 8 и MS Office 2007, так что код, писавшийся под MS Office 2013 хандрит.
Вот в этом коде:

Visual Basic
1
2
3
4
5
ChO.Chart.SeriesCollection.NewSeries
    ChO.Chart.FullSeriesCollection(2).Name = "Copy"
    ChO.Chart.FullSeriesCollection(2).XValues = sXValue
    sYValue = SWChartRange("SW", SWRow + 1, 2, SWRow + 1, NY + 1)
    ChO.Chart.FullSeriesCollection(2).Values = sYValue
предназначенном для добавления на Chart новой серии, не распознаётся FullSeriesCollection. Чем заменить?

Добавлено через 1 час 11 минут
Всё, нашёл.
Надо использовать SeriesCollection и всё в порядке.
Интересно, для чего понадобилось вводить это Full?
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
08.02.2018, 13:18 28
Если диаграмма построена на основании диапазона, содержащего скрытые ячейки, а установлена опция, что-то типа, учитывать только видимые ячейки, то seriescollection будет игнорировать скрытые ячейки, а fullseriescollection, нет (если верить справке, которую никто не читает)
0
08.02.2018, 13:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.02.2018, 13:18
Помогаю со студенческими работами здесь

Построение графиков и диаграмм VBA
Добрый вечер. Ребята очень нужно решить несколько практических по VBA: 1. Функція y=f(x) ...

Усовершенствование кода по переносу диаграмм
Подскажите пожалуйста, есть хороший нижеуказанный код по переносу и формированию всех диаграмм с...

Создание диаграмм средствами VBA
"Создайте форму с тремя текстовыми полями: «Количество точек для графика», «Начальное значение по...

Построение диаграмм excel vba
начал строить диаграмму через макрос, но столкнулся с проблемой объединенных несвязанных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru