Activesheet shapes addchart select ошибка

VBA: Вставка и форматирование графиков. Как это cделать?

Triangle

Дата: Четверг, 04.09.2014, 06:01 |
Сообщение № 1

Группа: Пользователи

Ранг: Прохожий

Сообщений: 8


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Всем привет! :)

Вожусь вот с экспериментальными данными. Хотел бы организовать рутинную работу. Буду рад, если подскажите, как это сделать..

Задача
— довольно простая.
Есть массив данных, разбитый на множество блоков. В каждом блоке есть пара столбцов со значениями, по которым нужно построить графики. Дабы не делать это много раз, склепал и сохранил в Template отформатированный как надо график, который хотел бы сделать для всех этих данных. Всего должно быть графиков 30.
Начал писать макрос на VBA и тут же споткнулся.

[vba]

Код

Sub Insert_Graph

‘ выделяю нужный интревал
Range(«E10065:F10116»).Select

‘ вставляю отформатированный график из Template
        ActiveSheet.Shapes.AddChart.Select
        ActiveChart.SetSourceData Source:=Range(«‘STAT’!$E$10065:$F$10116»)
        ActiveChart.ApplyChartTemplate ( _
              «C:…адрес тут…TemplatesChartsHistogram_black.crtx» _
              )

End Sub

[/vba]
Не работает. Появляется сообщение об ошибке:
«Run-time error ‘1004’:
The specified dimension is not valid for the current chart type»
При нажатии Debug, вот эта строчка выделяется жёлтым:
«ActiveSheet.Shapes.AddChart.Select»
Что тут неверно?

Вопрос 1:
Как правильно вставлять график из Templates?

Но это ещё не всё..
Затем я хотел бы сделать графики определённого размера, чтобы они все были одинаковые. При обычной встаке (ну, не макросом, а «ручками») графики появляются маленькие как я их не сохраняй. Вот тут уже обсуждался вопрос ресайза графиков на определённое количество ячеек. А можно изменять на определённое количество единиц Height и Width? В идеале было бы здорово дописать в макросе пару строчек кода, так чтобы после появления график автоматически ресайзился на заданное количество единиц (скажем, чтобы Height=7″ и Width=8″).

Вопрос 2:
Как с помощью макроса написанного в VBA изменить размер график на заданное количество единиц?

Сообщение отредактировал TriangleПятница, 05.09.2014, 02:43

 

Ответить

Rioran

Дата: Четверг, 04.09.2014, 11:05 |
Сообщение № 2

Группа: Авторы

Ранг: Ветеран

Сообщений: 903


Репутация:

290

±

Замечаний:
0% ±


Excel 2013

Triangle, здравствуйте.

Появляется сообщение об ошибке. Что тут неверно?

Без Вашего файла можно только гадать. Скорее всего, Вы неверно указываете макросу область для графика.

В качестве ответа на оба Ваших вопроса. Во вложении Вы найдете кнопку с макросом, которая создаст график, применит к нему шаблон и поиграется с параметрами. Предварительно поменяйте в ячейке G2 путь к шаблону. Сам шаблон также во вложении.

[vba]

Код

Sub Rio_Chart_Clone()

‘Author:    Roman Rioran Voronov
‘Date:      the 4-th of September, 2014
‘Feedback:  voronov_rv@mail.ru

‘This is how you may create a chart and use your template on it
‘with specifying table header and size

Dim X As Long ‘Для обращения к новому графику

‘Указываем программе, с каким листом будем работать.
‘Далее эта ссылка заменяется точкой перед обращением к объектам листа.
With ThisWorkbook.Worksheets(«Rio_List»)

‘Предосторожность для корректного построения графика
.Cells(1, 1).Select

ActiveSheet.Shapes.AddChart.Select ‘Создаём и выделяем график

‘Применяем к графику наш шаблон:
ActiveChart.ApplyChartTemplate (.Cells(2, 7).Value)

X = ActiveSheet.Shapes.Count ‘Считаем количество фигур на активном листе. Наша — последняя.

‘Далее от левой верхней ячейки таблицы вместе с заголовками до правой нижней ячейки таблицы…
ActiveChart.SetSourceData Source:=.Range(«A1:C9») ‘Выбираем область для создания диаграммы

ActiveChart.ChartTitle.Text = .Cells(5, 7).Value ‘Задаём заголовок таблицы

‘Меняем размеры таблицы
ActiveSheet.Shapes(X).Height = 283.4645669291 ’10 cm высота таблицы, задаём
ActiveSheet.Shapes(X).Width = 425.1968503937 ’15 cm ширина таблицы, задаём

End With
End Sub

[/vba]


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279

 

Ответить

Triangle

Дата: Пятница, 05.09.2014, 02:41 |
Сообщение № 3

Группа: Пользователи

Ранг: Прохожий

Сообщений: 8


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Rioran, спасибо! Посмотрел, у Вас всё работает. А можно ли сделать без относительных ссылок, а сразу прописать, например, название диаграммы в коде?

Пытался написать всё сам, чтобы понять, как работает. Но что-то не прёт.

[vba]

Код

Sub InsertGraph2()

With ThisWorkbook.Worksheets(«Sheet1»)
Cells(1, 1).Select

ActiveSheet.Shapes.AddChart.Select
ActiveChart.ApplyChartTemplate ( _
           «C:… adres tut … Histogram_black.crtx» _
           )
X = ActiveSheet.Shapes.Count

ActiveChart.SetSourceData Source:=Range(«‘Sheet1’!$A$1:$B$52»)
ActiveSheet.Shapes(X).Height = 200
ActiveSheet.Shapes(X).Width = 200

End With
End Sub

[/vba]

Спотыкается на этой строчке:
[vba]

Код

ActiveSheet.Shapes.AddChart.Select

[/vba]

Что не так, не пойму.. <_<
У меня Excel 2007.. если чё..

Сообщение отредактировал TriangleПятница, 05.09.2014, 02:48

 

Ответить

Rioran

Дата: Пятница, 05.09.2014, 10:19 |
Сообщение № 4

Группа: Авторы

Ранг: Ветеран

Сообщений: 903


Репутация:

290

±

Замечаний:
0% ±


Excel 2013

Triangle, Вам нужно для всех значений столбца А сделать текстовый формат (возможно, что не обязательно). Плюс, ключевой момент — вставьте сверху таблицы свободную строку и напишите в ней текстовые заголовки. Я это сделал и у меня Ваш макрос сработал.

Можно и без относительных ссылок. Когда добавляется Chart объект, у него генерится имя. У моего шаблона, например, имя: «Rounded Rectangle Х» где Х меняется в зависимости от количества созданных графиков. Вы можете сами задать имя новому Cart’у, если сделаете следующее:

[vba]

Код

ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Name = «Rio_Chart»

[/vba]
В дальнейшем к нему можно будет обращаться:

[vba]

Код

ActiveSheet.Shapes(«Rio_Chart»).Name

[/vba]
Если же надо узнать имя последнего созданного графика, как его зовут сейчас — используйте:

[vba]

Код

MsgBox ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Name

[/vba]


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279

Сообщение отредактировал RioranПятница, 05.09.2014, 11:00

 

Ответить

Triangle

Дата: Пятница, 05.09.2014, 21:09 |
Сообщение № 5

Группа: Пользователи

Ранг: Прохожий

Сообщений: 8


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Плюс, ключевой момент — вставьте сверху таблицы свободную строку и напишите в ней текстовые заголовки. Я это сделал и у меня Ваш макрос сработал.

Сделал так. Всё равно не работает. Всё та же ошибка всё в том же месте.
Не могу понять, что такого таинственного в этой строке:
[vba]

Код

ActiveSheet.Shapes.AddChart.Select

[/vba]Мы ведь просто говорим этим, что нужно на активном листе создать фигуру, причём не какую-нибудь, а график, а потом нам надо этот график выделить. Всё. По идее, должен создаться совершенно любой график (ну, тот, который стоит по умолчанию), для которого мы уже потом сможем применить наш Template. Может ли быть проблема в создании графика по умолчанию?
Что может в данном контексте значить ошибка 1004?
[vba]

Код

«Run-time error ‘1004’:
The specified dimension is not valid for the current chart type»

[/vba]

Сижу, листаю мануал.. Эх.. %)

Сообщение отредактировал TriangleПятница, 05.09.2014, 21:10

 

Ответить

AndreTM

Дата: Пятница, 05.09.2014, 21:45 |
Сообщение № 6

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

Может, надо все же работать с конкретным объектом, а не с «неким выделенным»? :)
Особенно, если ваш файл включен в «режиме совместимости», а потому и .Shapes не может добавить .Chart. Хотя, если посмотреть со стороны — то, может быть, над опросто задать в .AddChart ещё и размеры?

Давайте воспользуемся старым добрым Embedded, например:
[vba]

Код

Set MyChart = ActiveSheet.ChartObjects.Add(100, 50, 200, 100)
With MyChart
     .Name = «Мой график»
     ‘…
End With

[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

Rioran

Дата: Пятница, 05.09.2014, 21:57 |
Сообщение № 7

Группа: Авторы

Ранг: Ветеран

Сообщений: 903


Репутация:

290

±

Замечаний:
0% ±


Excel 2013

Triangle, спокойствие, только спокойствие, как завещал великий карлсон =)

Беру Ваш же файл (и макрос). Ставлю в файл кнопку. Теперь по нажатию Вам надо будет выбрать шаблон, который применяете. Файл во вложении, попробуйте и поделитесь результатами.

[vba]

Код

Sub InsertGraph2()

Dim strX As String
Dim fd As FileDialog
Dim FileChosen As Integer

Set fd = Application.FileDialog(msoFileDialogFilePicker)
FileChosen = fd.Show

If FileChosen <> -1 Then
     MsgBox «You chose cancel»
Else
     strX = fd.SelectedItems(1)
End If

With ThisWorkbook.Worksheets(«Sheet1»)
Cells(1, 1).Select

ActiveSheet.Shapes.AddChart.Select
ActiveChart.ApplyChartTemplate (strX)
X = ActiveSheet.Shapes.Count

ActiveChart.SetSourceData Source:=Range(«‘Sheet1’!$A$1:$B$52»)
ActiveSheet.Shapes(X).Height = 200
ActiveSheet.Shapes(X).Width = 200

End With
End Sub

[/vba]
Есть кое-какие подозрения, заодно проверим.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279

 

Ответить

Rioran

Дата: Пятница, 05.09.2014, 22:00 |
Сообщение № 8

Группа: Авторы

Ранг: Ветеран

Сообщений: 903


Репутация:

290

±

Замечаний:
0% ±


Excel 2013

потому и .Shapes не может добавить .Chart

Андрей, тогда странно, что мой первый макрос сработал:

Rioran, спасибо! Посмотрел, у Вас всё работает.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279

 

Ответить

AndreTM

Дата: Пятница, 05.09.2014, 22:03 |
Сообщение № 9

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

странно, что мой первый макрос сработал

:) — вот я и подозреваю, что

файл [у пользователя] включен в «режиме совместимости»

, а пример, естественно, — нет…


Skype: andre.tm.007
Donate: Qiwi: 9517375010

 

Ответить

Triangle

Дата: Понедельник, 08.09.2014, 05:40 |
Сообщение № 10

Группа: Пользователи

Ранг: Прохожий

Сообщений: 8


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Rioran, вот Вам мой отчёт.

Скачал последний файл с этим многострадальным макросом.
Открываю. Всё работает не в режиме совместимости, всё вроде в порядке.


Нажимаю на кнопку для построения графика.
Открывается окно и предложение выбрать template для графика.
Нахожу свой *.crtx, выбираю, нажимаю ОК.
Макрос спотыкается и появляется сообщение об ошибке:

При дебаге та строчка, о которой я писал, снова выделяется желтым.

Такие дела..

=========================

AndreTM, спасибо за совет. Но тоже не работает.
Спотыкается макрос и появляется такое сообщение об ошибке:

При попытке дебага желтым выделена первая же строка:
[vba]

Код

Set MyChart = ActiveSheet.ChartObjects.Add(100, 50, 200, 100)

[/vba]
=========================

Чё-то я чую, что не прёт, потому что я изначально что-то делаю не так.. <_<

Сообщение отредактировал TriangleПонедельник, 08.09.2014, 05:49

 

Ответить

Rioran

Дата: Вторник, 09.09.2014, 09:38 |
Сообщение № 11

Группа: Авторы

Ранг: Ветеран

Сообщений: 903


Репутация:

290

±

Замечаний:
0% ±


Excel 2013

Triangle, давайте ещё кое-что попробуем. Перезапустите компьютер, ничего в экселе кроме моего примера не открывайте. Когда нажмёте на кнопку макроса — выберете приложенный к теме мой или свой шаблон графика.


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279

 

Ответить

Triangle

Дата: Вторник, 09.09.2014, 16:42 |
Сообщение № 12

Группа: Пользователи

Ранг: Прохожий

Сообщений: 8


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Rioran, yes, sir! Сделано, sir! Всё как Вы сказали, sir! Всё равно ни черта не работает, sir! :D

В общем, комп перезагрузил, открыл только «Insert_Graph_4.xlsm», запустил макрос.
Появляется всё то же Run-time error ‘1004’, а дальше, как и раньше:

Видимо, придётся графики ручками вставлять без всяких макросов. Тогда надо будет хотя бы попробовать написать макрос для форматирования выделенного графика. Что, наверное, займёт чуть больше времени. Ну, это как вариант..

 

Ответить

nilem

Дата: Вторник, 09.09.2014, 18:06 |
Сообщение № 13

Группа: Авторы

Ранг: Старожил

Сообщений: 1612


Репутация:

563

±

Замечаний:
0% ±


Excel 2013, 2016

может, попробовать без Селекта (запускаем при активном листе Sheet1 из книги Insert_Graph_4)
[vba]

Код

Sub InsertGraph2()
Dim strX As String
With Application.FileDialog(msoFileDialogFilePicker)
      If .Show Then strX = .SelectedItems(1) Else MsgBox «You’ve chosen cancel»: Exit Sub
End With
With ActiveSheet.Shapes.AddChart
      .Chart.ApplyChartTemplate (strX)
      .Chart.SetSourceData Range(«$A$1:$B$52»)
      .Height = 200: .Width = 200
End With
End Sub

[/vba]


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilemВторник, 09.09.2014, 18:10

 

Ответить

Triangle

Дата: Вторник, 09.09.2014, 21:27 |
Сообщение № 14

Группа: Пользователи

Ранг: Прохожий

Сообщений: 8


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

nilem, благодарю за совет, но..
Видимо не в Select дело.

Сообщение отредактировал TriangleВторник, 09.09.2014, 21:27

 

Ответить

AndreTM

Дата: Среда, 10.09.2014, 03:11 |
Сообщение № 15

Группа: Друзья

Ранг: Старожил

Сообщений: 1762


Репутация:

498

±

Замечаний:
0% ±


2003 & 2010

Я бы посоветовал тогда Офис переставить :) Полностью весь комплект.
Поскольку у меня всё вышеприведённое нами — отрабатывает на ура в любом случае прямо из кода.

Как вариант — проверьте параллельные процессы офисных прог, а также автозапуски Excel и Outlook…

P.S. Ещё вариант вспомнился — VB/J/дельфи-проги, пользующие у себя Офис в качестве вывода данных. Могут просто (и глупо) взять в монопольку офисные библиотеки для отрисовки некоего онлайна (изображая из себя гаджеты w7/8), а запущенная копия Офиса просто не поймёт, что один из их процессов уже работает как полуDOM…

P.S. Самый простой реал — проверять наши примеры на отдельной НЕ ВАШЕЙ машине. Если уж и там будет то же самое :(


Skype: andre.tm.007
Donate: Qiwi: 9517375010

Сообщение отредактировал AndreTMСреда, 10.09.2014, 03:22

 

Ответить

Triangle

Дата: Среда, 10.09.2014, 03:30 |
Сообщение № 16

Группа: Пользователи

Ранг: Прохожий

Сообщений: 8


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

AndreTM, спасибо! Переустановка офиса — дело проблематичное.. Звать сис.админа, уговаривать переставлять, объяснять, почему мне это надо..

Мне вот уже пришла в голову идея, что надо бы все макросы проверить на домашнем компе. Там правда старенький офис, но не думаю, что это будет круциально. Ну, всяко надо бы поглядеть..

 

Ответить

Triangle

Дата: Среда, 10.09.2014, 03:35 |
Сообщение № 17

Группа: Пользователи

Ранг: Прохожий

Сообщений: 8


Репутация:

0

±

Замечаний:
0% ±


Excel 2007

Вопросы ко всем:

А есть в Excel какое-нибудь специальное меню, позволяющее управлять его взаимопониманием с VBA?
Может у меня там нет каких-нибудь несчастных пары галочек, из-за которых VBA пашет так криво?
Дурацкий вопрос, но какой вот есть..

 

Ответить

nilem

Дата: Среда, 10.09.2014, 07:21 |
Сообщение № 18

Группа: Авторы

Ранг: Старожил

Сообщений: 1612


Репутация:

563

±

Замечаний:
0% ±


Excel 2013, 2016

Triangle,
а в таком виде работает?:
[vba]

Код

Sub InsertGraph2()
‘Dim strX As String
‘With Application.FileDialog(msoFileDialogFilePicker)
‘    If .Show Then strX = .SelectedItems(1) Else MsgBox «You’ve chosen cancel»: Exit Sub
‘End With
With ActiveSheet.ChartObjects.Add(150, 250, 200, 200)
      ‘.Chart.ChartType = xlLine
      ‘.Chart.ApplyChartTemplate (strX)
      .Chart.SetSourceData Range(«$A$1:$B$52»)
End With
End Sub

[/vba]

Оказалось, Андрей уже предлагал (пост №6)


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilemСреда, 10.09.2014, 07:23

 

Ответить

 

Alejandro67

Пользователь

Сообщений: 19
Регистрация: 22.07.2013

#1

16.10.2014 01:08:09

Уважаемые, подскажите как изменить код,  что бы диаграммы строились в определенном месте видимой области листа. или же в определенном месте. Код такой:

Скрытый текст

Соответственно все диаграммы строятся на одном и том же месте, друг за другом.  
Метод   записи макрорекодером дает такое решение

Код
ActiveSheet.Shapes("Диаграмма 1093").IncrementLeft -204.

которое не работает  :(  так как здесь идет указание на диаграмму, которая уже была создана.
пробовал присвоить переменную с именем диаграммы, что бы затем ссылаться на неё

Код
t = ActiveChart.Name
ActiveSheet.Shapes(t).IncrementLeft -204.

Увы, и этот метод снова не работает.  :(  
Подскажите как быть в этом случае?.

 

Андрей VG

Пользователь

Сообщений: 11878
Регистрация: 22.12.2012

Excel 2016, 365

#2

16.10.2014 07:02:37

Доброе время суток
Замените

Код
ActiveSheet.Shapes.AddChart.Select

на следующий код

Код
Dim chartShape As Shape
Set chartShape = ActiveSheet.Shapes.AddChart
chartShape.Left = xxx 'положение от левого края рабочего листа
chartShape.Top = yyy 'положение от верхнего края 

Успехов.

 

Alejandro67

Пользователь

Сообщений: 19
Регистрация: 22.07.2013

#3

16.10.2014 09:49:54

Спасибо, Работает, только надо потом вернуть выделение

Код
Dim chartShape as Shape 
Код
Set chartShape = ActiveSheet.Shapes.AddChart
chartShape.Left = xxx 'положение от левого края рабочего листа
chartShape.Top = yyy 'положение от верхнего края
chartShape.Select
 

данный код соответственно будет размещать график по координатам листа.

Если надо разместить график по координатам относительно видимой части листа то нужен такой код:

Код
 Dim chartShape As Shape
Set chartShape = ActiveSheet.Shapes.AddChart
chartShape.IncrementLeft xxx 'положение от левого края видимой области
chartShape.IncrementTop yyy ' положение от верхнего края видимой области
chartShape.Select
 
 

Максим Зеленский

Пользователь

Сообщений: 4658
Регистрация: 11.06.2014

Microsoft MVP 2018-2022

#4

16.10.2014 13:07:33

Цитата
Alejandro67 пишет: относительно видимой части

любопытный эффект. Не думал, что Increment именно так работает — отсылок на видимый диапазон в справке нет

F1 творит чудеса

 

apelmon

Пользователь

Сообщений: 1
Регистрация: 19.03.2017

Здравствуйте. Помогите пожалуйста. Не могу запустить записаный макрос. Ошибку в коде выдает на строке ActiveSheet.Shapes.AddChart.Select.

 

Dima S

Пользователь

Сообщений: 2063
Регистрация: 01.01.1970

#6

19.03.2017 14:18:55

Цитата
Максим Зеленский написал:
Не думал, что Increment именно так работает — отсылок на видимый диапазон в справке нет

потому что это не так)
Increment — прирост, увеличение. Соответственно это действие лишь добавляет указанное количество пунктов к текущим координатам объекта.
Откуда трактовка про видимую область — непонятно.
Наверное потому, что диаграмма по умолчанию создается по центру видимой области)

Цитата
apelmon написал:
Не могу запустить записаный макрос

у меня запускается) вашего не вижу.

Since you want the chart to be on a new sheet,
you have to change the macro’s «Sheet1» to new worksheet’s name,
The following macro should work for you, I have named the new worksheet as newWs

And fyi, your macro’s error message I believe is due to trying to creating 2 pivot table of the same name on «Sheet1» is not allowed.

He also like to know what to create pivotTable base on Selected Area, so I have done modification to the code.

Edited: I Assume you select 2 columns each time

Sub chart1()
 '
 ' chart1 Macro
 '

 '
Dim selectedSheetName As String
Dim newWs As Worksheet
Dim rangeName As String
Dim header1 As String
Dim header2 As String
header1 = ActiveSheet.Cells(1, Selection.Column).Value
header2 = ActiveSheet.Cells(1, Selection.Column + 1).Value
selectedSheetName = ActiveSheet.Name
rangeName = Selection.Address
Set newWs = Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    selectedSheetName & "!" & rangeName, Version:=xlPivotTableVersion12).CreatePivotTable _
    TableDestination:=newWs.Name & "!R3C1", TableName:="PivotTable1", DefaultVersion _
    :=xlPivotTableVersion12
newWs.Activate
Cells(3, 1).Select
With ActiveSheet.PivotTables("PivotTable1").PivotFields(header1)
    .Orientation = xlRowField
    .Position = 1
End With
With ActiveSheet.PivotTables("PivotTable1").PivotFields(header2)
    .Orientation = xlColumnField
    .Position = 1
End With
ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
    "PivotTable1").PivotFields(header2), "Count of answer1", xlCount
With ActiveSheet.PivotTables("PivotTable1").PivotFields(header2)
    .Orientation = xlPageField
    .Position = 1
End With
ActiveSheet.PivotTables("PivotTable1").PivotFields(header2).Orientation = _
    xlHidden
With ActiveSheet.PivotTables("PivotTable1").PivotFields(header2)
    .Orientation = xlColumnField
    .Position = 1
End With
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range(newWs.Name & "!$A$3:$D$6")
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range(newWs.Name & "!$A$3:$D$6")
ActiveChart.ChartType = xlColumnClustered
End Sub

  1. 06-06-2013, 04:29 PM


    #1

    bcn1988 is offline


    Forum Contributor


    ActiveSheet.Shapes.AddChart.Select Run-Time Error ‘1004’

    Hello!

    I have some code below that used to work and now all of a sudden it doesn’t.
    The code is failing at

    ActiveSheet.Shapes.AddChart.Select
    I have never had an issue with the code not running through the entire procedure. Is there a work around for where the code is failing?

    Thank you!


  2. 06-06-2013, 04:32 PM


    #2

    Re: ActiveSheet.Shapes.AddChart.Select Run-Time Error ‘1004’

    I don’t know why it fails but selecting is not required

    Josie

    if at first you don’t succeed try doing it the way your wife told you to


  3. 06-06-2013, 04:42 PM


    #3

    bcn1988 is offline


    Forum Contributor


    Re: ActiveSheet.Shapes.AddChart.Select Run-Time Error ‘1004’

    Hey JP,

    I tried your code, and it still fails at the first line

    ActiveSheet.Shapes.AddChart.Chart

    Any more thoughts?


  4. 06-06-2013, 04:43 PM


    #4

    Re: ActiveSheet.Shapes.AddChart.Select Run-Time Error ‘1004’

    did you protect the sheet? or share the workbook?


  5. 06-07-2013, 09:08 AM


    #5

    bcn1988 is offline


    Forum Contributor


    Re: ActiveSheet.Shapes.AddChart.Select Run-Time Error ‘1004’

    Hey JP,

    Sheet is not protected nor has the workbook been shared.


  6. 06-07-2013, 09:22 AM


    #6

    Re: ActiveSheet.Shapes.AddChart.Select Run-Time Error ‘1004’

    do you have more than one sheet selected?


  7. 06-07-2013, 10:02 AM


    #7

    bcn1988 is offline


    Forum Contributor


    Re: ActiveSheet.Shapes.AddChart.Select Run-Time Error ‘1004’

    No, only one sheet is activated…


  8. 06-07-2013, 10:36 AM


    #8

    Re: ActiveSheet.Shapes.AddChart.Select Run-Time Error ‘1004’


  9. 06-07-2013, 11:27 AM


    #9

    bcn1988 is offline


    Forum Contributor


    Re: ActiveSheet.Shapes.AddChart.Select Run-Time Error ‘1004’

    Including this clause works:


  10. 06-07-2013, 11:30 AM


    #10

    Re: ActiveSheet.Shapes.AddChart.Select Run-Time Error ‘1004’

    that’s not the same thing-it gets a reference to an existing chart rather than creating a new one. also the

    is totally unnecessary (you ought never to need that!)


  • #1

I have the following code that I have used for 4 months now and all of a sudden it decides that it is not going to work.

Sub BkPremCharts()

Columns(«F:F»).ColumnWidth = 1.8

Set ws_data = Sheets(wsBPM)

Application.DisplayAlerts = False
Sheets(wsBPM).Activate
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Range(«B8:D20»)

ActiveChart.ApplyLayout (3)
ActiveChart.ChartTitle.Select
ActiveChart.ChartTitle.Text = «Total»
ActiveChart.ApplyLayout (1)

With ws_data.Range(«g7»)
L = .Left
T = .Top
W = .Width
H = .Height
End With

With ActiveChart.Parent
.Left = L
.Top = T
.Width = W * 6
.Height = H * 10
End With

ActiveChart.Parent.Name = «BPM1»

Set ws_data = Sheets(wsBPM)

Application.DisplayAlerts = False
Sheets(wsBPM).Activate
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Range(«B27:D39»)

ActiveChart.ApplyLayout (3)
ActiveChart.ChartTitle.Select
ActiveChart.ChartTitle.Text = «Underwriter»
ActiveChart.ApplyLayout (1)

With ws_data.Range(«g26»)
L = .Left
T = .Top
W = .Width
H = .Height
End With

With ActiveChart.Parent
.Left = L
.Top = T
.Width = W * 6
.Height = H * 12.5
End With
ActiveChart.Parent.Name = «BPM2»
Range(«B25»).Select
End Sub

I am getting the following error «method shapes of object worksheet failed» it is occuring on the ActiveSheet.Shapes.AddChart.Select line in both sections.

Any ideas why this would all of a sudden show up??

Thank you

Dave

What did Pito Salas invent?

Pito Salas, working for Lotus, popularized what would become to be pivot tables. It was released as Lotus Improv in 1989.

  • #2

Try like this

Code:

Dim ch As ChartObject
Set ch = ActiveSheet.ChartObjects.Add(Left:=100, Width:=375, Top:=75, Height:=225)
ch.Chart.ChartType = xlColumnClustered
ch.Chart.SetSourceData Source:=Range("B8:D20")

  • #3

VoG —

Why would it all of a sudden start messing up? I guess that is the greater question that I would like answered.

Dave

  • #4

VoG —

I put your code in and got a new error.

Automation Error — The object invoked has disconnected from its clients.

Dave

  • #6

VoG —

My boss and I figured out what was going on. Somehow the sheet got corrupted or something like that. Ended up deleting and recreating with the same name and it worked. So it was actually nothing with the code. Thanks for all the help. Anyone else who reads this if you have ever heard of or encountered an issue like this could you explain.

Dave

Возможно, вам также будет интересно:

  • Active hood kia stinger ошибка
  • Active hood kia sorento ошибка как исправить
  • Active directory ошибка при добавлении принтера
  • Active directory ошибка 1925
  • Active code page 65001 ошибка

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии