Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

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

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » VBA: Вставка и форматирование графиков. Как это cделать? (Макросы/Sub)
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:\...адрес тут...\Templates\Charts\Histogram_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 изменить размер график на заданное количество единиц?
К сообщению приложен файл: Insert_Graph_1.xlsm (15.2 Kb) · 3670517.crtx (3.9 Kb)


Сообщение отредактировал Triangle - Пятница, 05.09.2014, 02:43
 
Ответить
СообщениеВсем привет! :)

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

Задача
- довольно простая.
Есть массив данных, разбитый на множество блоков. В каждом блоке есть пара столбцов со значениями, по которым нужно построить графики. Дабы не делать это много раз, склепал и сохранил в 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:\...адрес тут...\Templates\Charts\Histogram_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
Дата добавления - 04.09.2014 в 06:01
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]
К сообщению приложен файл: Green2lines.crtx (5.4 Kb) · Template_Charti.xlsm (17.9 Kb)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
Сообщение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]

Автор - Rioran
Дата добавления - 04.09.2014 в 11:05
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.. если чё..
К сообщению приложен файл: Insert_Graph_2.xlsm (16.4 Kb) · Histogram_black.crtx (3.9 Kb)


Сообщение отредактировал Triangle - Пятница, 05.09.2014, 02:48
 
Ответить
Сообщение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:41
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, Вам нужно для всех значений столбца А сделать текстовый формат (возможно, что не обязательно). Плюс, ключевой момент - вставьте сверху таблицы свободную строку и напишите в ней текстовые заголовки. Я это сделал и у меня Ваш макрос сработал.

Можно и без относительных ссылок. Когда добавляется 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]

Автор - Rioran
Дата добавления - 05.09.2014 в 10:19
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
 
Ответить
Сообщение
Плюс, ключевой момент - вставьте сверху таблицы свободную строку и напишите в ней текстовые заголовки. Я это сделал и у меня Ваш макрос сработал.
Сделал так. Всё равно не работает. Всё та же ошибка всё в том же месте.
Не могу понять, что такого таинственного в этой строке:
[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:09
AndreTM Дата: Пятница, 05.09.2014, 21:45 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 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
 
Ответить
СообщениеМожет, надо все же работать с конкретным объектом, а не с "неким выделенным"? :)
Особенно, если ваш файл включен в "режиме совместимости", а потому и .Shapes не может добавить .Chart. Хотя, если посмотреть со стороны - то, может быть, над опросто задать в .AddChart ещё и размеры?

Давайте воспользуемся старым добрым Embedded, например:
[vba]
Код
Set MyChart = ActiveSheet.ChartObjects.Add(100, 50, 200, 100)
With MyChart
     .Name = "Мой график"
     '...
End With
[/vba]

Автор - AndreTM
Дата добавления - 05.09.2014 в 21:45
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]
Есть кое-какие подозрения, заодно проверим.
К сообщению приложен файл: Insert_Graph_3.xlsm (19.0 Kb)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
Сообщение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]
Есть кое-какие подозрения, заодно проверим.

Автор - Rioran
Дата добавления - 05.09.2014 в 21:57
Rioran Дата: Пятница, 05.09.2014, 22:00 | Сообщение № 8
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

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

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

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


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
Сообщение
потому и .Shapes не может добавить .Chart

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

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

Автор - Rioran
Дата добавления - 05.09.2014 в 22:00
AndreTM Дата: Пятница, 05.09.2014, 22:03 | Сообщение № 9
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
странно, что мой первый макрос сработал
:) - вот я и подозреваю, что
файл [у пользователя] включен в "режиме совместимости"
, а пример, естественно, - нет...


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
Сообщение
странно, что мой первый макрос сработал
:) - вот я и подозреваю, что
файл [у пользователя] включен в "режиме совместимости"
, а пример, естественно, - нет...

Автор - AndreTM
Дата добавления - 05.09.2014 в 22:03
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, вот Вам мой отчёт.

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


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



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



Такие дела..

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

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



При попытке дебага желтым выделена первая же строка:
[vba]
Код
Set MyChart = ActiveSheet.ChartObjects.Add(100, 50, 200, 100)
[/vba]
=========================

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

Автор - Triangle
Дата добавления - 08.09.2014 в 05:40
Rioran Дата: Вторник, 09.09.2014, 09:38 | Сообщение № 11
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Triangle, давайте ещё кое-что попробуем. Перезапустите компьютер, ничего в экселе кроме моего примера не открывайте. Когда нажмёте на кнопку макроса - выберете приложенный к теме мой или свой шаблон графика.
К сообщению приложен файл: Insert_Graph_4.xlsm (19.2 Kb)


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279
 
Ответить
СообщениеTriangle, давайте ещё кое-что попробуем. Перезапустите компьютер, ничего в экселе кроме моего примера не открывайте. Когда нажмёте на кнопку макроса - выберете приложенный к теме мой или свой шаблон графика.

Автор - Rioran
Дата добавления - 09.09.2014 в 09:38
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', а дальше, как и раньше:



Видимо, придётся графики ручками вставлять без всяких макросов. Тогда надо будет хотя бы попробовать написать макрос для форматирования выделенного графика. Что, наверное, займёт чуть больше времени. Ну, это как вариант..
 
Ответить
СообщениеRioran, yes, sir! Сделано, sir! Всё как Вы сказали, sir! Всё равно ни черта не работает, sir! :D

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



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

Автор - Triangle
Дата добавления - 09.09.2014 в 16:42
nilem Дата: Вторник, 09.09.2014, 18:06 | Сообщение № 13
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 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
 
Ответить
Сообщениеможет, попробовать без Селекта (запускаем при активном листе 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]

Автор - nilem
Дата добавления - 09.09.2014 в 18:06
Triangle Дата: Вторник, 09.09.2014, 21:27 | Сообщение № 14
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

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





Сообщение отредактировал Triangle - Вторник, 09.09.2014, 21:27
 
Ответить
Сообщениеnilem, благодарю за совет, но..
Видимо не в Select дело.




Автор - Triangle
Дата добавления - 09.09.2014 в 21:27
AndreTM Дата: Среда, 10.09.2014, 03:11 | Сообщение № 15
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

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

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

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

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


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


Сообщение отредактировал AndreTM - Среда, 10.09.2014, 03:22
 
Ответить
Сообщение
Видимо не в Select дело.
Я бы посоветовал тогда Офис переставить :) Полностью весь комплект.
Поскольку у меня всё вышеприведённое нами - отрабатывает на ура в любом случае прямо из кода.

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

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

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

Автор - AndreTM
Дата добавления - 10.09.2014 в 03:11
Triangle Дата: Среда, 10.09.2014, 03:30 | Сообщение № 16
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

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

Мне вот уже пришла в голову идея, что надо бы все макросы проверить на домашнем компе. Там правда старенький офис, но не думаю, что это будет круциально. Ну, всяко надо бы поглядеть..
 
Ответить
СообщениеAndreTM, спасибо! Переустановка офиса - дело проблематичное.. Звать сис.админа, уговаривать переставлять, объяснять, почему мне это надо..

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

Автор - Triangle
Дата добавления - 10.09.2014 в 03:30
Triangle Дата: Среда, 10.09.2014, 03:35 | Сообщение № 17
Группа: Пользователи
Ранг: Прохожий
Сообщений: 8
Репутация: 0 ±
Замечаний: 0% ±

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

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

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

Автор - Triangle
Дата добавления - 10.09.2014 в 03:35
nilem Дата: Среда, 10.09.2014, 07:21 | Сообщение № 18
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 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
 
Ответить
Сообщение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)

Автор - nilem
Дата добавления - 10.09.2014 в 07:21
Мир MS Excel » Вопросы и решения » Вопросы по VBA » VBA: Вставка и форматирование графиков. Как это cделать? (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!