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

Вход

Регистрация

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

 

= Мир MS Excel/Имя диаграммы - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Имя диаграммы (Макросы/Sub)
Имя диаграммы
inohodec Дата: Пятница, 04.12.2015, 11:12 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Всем доброе утро! Незнаю даже к какому разделу ближе мой вопрос к VBA или Exce (Графики и диаграммы)l. Если надо перенести тему в другой раздел.

Суть проблемы такова:
Есть макросс который копирует диограммы на 1 листе и вставляет рисунок диаграммы в нужный мне лист, диаграмм 42 штуки.
[vba]
Код

    Sheets(1).Select
    ActiveSheet.ChartObjects("2").Copy
    Sheets(3).Select
    Range("A7").Select
    ActiveSheet.Pictures.Paste.Select
    Selection.ShapeRange.LockAspectRatio = msoFalse
    Selection.ShapeRange.Height = 436.5354330709
    Selection.ShapeRange.Width = 714.3307086614
    Range("A6").Select

    Sheets(1).Select
    ActiveSheet.ChartObjects("3").Copy
    Sheets(5).Select
    Range("A7").Select
    ActiveSheet.Pictures.Paste.Select
    Selection.ShapeRange.LockAspectRatio = msoFalse
    Selection.ShapeRange.Height = 436.5354330709
    Selection.ShapeRange.Width = 714.3307086614
    Range("A6").Select
    
    Sheets(1).Select
    ActiveSheet.ChartObjects("4").Copy
    Sheets(7).Select
    Range("A7").Select
    ActiveSheet.Pictures.Paste.Select
    Selection.ShapeRange.LockAspectRatio = msoFalse
    Selection.ShapeRange.Height = 436.5354330709
    Selection.ShapeRange.Width = 714.3307086614
    Range("A6").Select
[/vba]

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


Лечу этот глюк тем, что проклациваю диаграммы, захожу в макет и в имени диаграммы указваю, что 1 диаграмма это 1, 2 это 2 ...... и так до 42.
[vba]
Код

    ActiveSheet.ChartObjects("6").Activate
    ActiveChart.Axes(xlCategory).MajorGridlines.Select
    ActiveSheet.ChartObjects("11").Activate
    ActiveChart.Axes(xlValue).MajorGridlines.Select
    ActiveSheet.ChartObjects("25").Activate
    ActiveChart.Axes(xlValue).MajorGridlines.Select
    ActiveSheet.ChartObjects("21").Activate
[/vba]

После данных манипуляций вставка работает, но некоторые рисунки диаграмм, каким то волшебным образом, вставляются не на те листы.
Номера листов в которые вставляются не те рисунки постоянно изменяются, но есть и рисунок номер 1 который стабильно ставится на лист 67 как надо.
Что это может быть за глюк и как с этим боротся?

Файл очень хотел подкрепить но он весит 7 метров.
 
Ответить
СообщениеВсем доброе утро! Незнаю даже к какому разделу ближе мой вопрос к VBA или Exce (Графики и диаграммы)l. Если надо перенести тему в другой раздел.

Суть проблемы такова:
Есть макросс который копирует диограммы на 1 листе и вставляет рисунок диаграммы в нужный мне лист, диаграмм 42 штуки.
[vba]
Код

    Sheets(1).Select
    ActiveSheet.ChartObjects("2").Copy
    Sheets(3).Select
    Range("A7").Select
    ActiveSheet.Pictures.Paste.Select
    Selection.ShapeRange.LockAspectRatio = msoFalse
    Selection.ShapeRange.Height = 436.5354330709
    Selection.ShapeRange.Width = 714.3307086614
    Range("A6").Select

    Sheets(1).Select
    ActiveSheet.ChartObjects("3").Copy
    Sheets(5).Select
    Range("A7").Select
    ActiveSheet.Pictures.Paste.Select
    Selection.ShapeRange.LockAspectRatio = msoFalse
    Selection.ShapeRange.Height = 436.5354330709
    Selection.ShapeRange.Width = 714.3307086614
    Range("A6").Select
    
    Sheets(1).Select
    ActiveSheet.ChartObjects("4").Copy
    Sheets(7).Select
    Range("A7").Select
    ActiveSheet.Pictures.Paste.Select
    Selection.ShapeRange.LockAspectRatio = msoFalse
    Selection.ShapeRange.Height = 436.5354330709
    Selection.ShapeRange.Width = 714.3307086614
    Range("A6").Select
[/vba]

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


Лечу этот глюк тем, что проклациваю диаграммы, захожу в макет и в имени диаграммы указваю, что 1 диаграмма это 1, 2 это 2 ...... и так до 42.
[vba]
Код

    ActiveSheet.ChartObjects("6").Activate
    ActiveChart.Axes(xlCategory).MajorGridlines.Select
    ActiveSheet.ChartObjects("11").Activate
    ActiveChart.Axes(xlValue).MajorGridlines.Select
    ActiveSheet.ChartObjects("25").Activate
    ActiveChart.Axes(xlValue).MajorGridlines.Select
    ActiveSheet.ChartObjects("21").Activate
[/vba]

После данных манипуляций вставка работает, но некоторые рисунки диаграмм, каким то волшебным образом, вставляются не на те листы.
Номера листов в которые вставляются не те рисунки постоянно изменяются, но есть и рисунок номер 1 который стабильно ставится на лист 67 как надо.
Что это может быть за глюк и как с этим боротся?

Файл очень хотел подкрепить но он весит 7 метров.

Автор - inohodec
Дата добавления - 04.12.2015 в 11:12
Roman777 Дата: Пятница, 04.12.2015, 11:25 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
inohodec, удалить из файла всё кроме 1-2 диаграмм ваших...)


Много чего не знаю!!!!
 
Ответить
Сообщениеinohodec, удалить из файла всё кроме 1-2 диаграмм ваших...)

Автор - Roman777
Дата добавления - 04.12.2015 в 11:25
Эх_Прорвёмся Дата: Пятница, 04.12.2015, 11:27 | Сообщение № 3
Группа: Заблокированные
Ранг: Участник
Сообщений: 72
Репутация: -21 ±
Замечаний: 100% ±

Excel 2003
Файл очень хотел подкрепить но он весит 7 метров.

Сделайте коротенький файл-пример с двумя диаграммами и несколькими листами.


Объяснять как бабушке на скамеечке у подъезда.
 
Ответить
Сообщение
Файл очень хотел подкрепить но он весит 7 метров.

Сделайте коротенький файл-пример с двумя диаграммами и несколькими листами.

Автор - Эх_Прорвёмся
Дата добавления - 04.12.2015 в 11:27
inohodec Дата: Пятница, 04.12.2015, 11:58 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Сделал короткую версию
К сообщению приложен файл: _42_1.xls (99.5 Kb)
 
Ответить
СообщениеСделал короткую версию

Автор - inohodec
Дата добавления - 04.12.2015 в 11:58
SLAVICK Дата: Пятница, 04.12.2015, 12:01 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Если есть четкая логика копирования - можно сделать обычный цикл типа:

[vba]
Код
For each d in  ActiveSheet.ChartObjects
сюда код что делать
Next
[/vba]
И код Ваш сразу уменьшится раз в 40 :D


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Пятница, 04.12.2015, 12:01
 
Ответить
СообщениеЕсли есть четкая логика копирования - можно сделать обычный цикл типа:

[vba]
Код
For each d in  ActiveSheet.ChartObjects
сюда код что делать
Next
[/vba]
И код Ваш сразу уменьшится раз в 40 :D

Автор - SLAVICK
Дата добавления - 04.12.2015 в 12:01
inohodec Дата: Пятница, 04.12.2015, 12:22 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 41
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо за совет, я и сам хотел так сделать, но для этого сначала хочу файл немного поменять (его структуру с таблицами и диаграммами), чтоб все стояли по порядку.
Я только учусь программированию. Поэтому и макроссы такие большие :(
 
Ответить
СообщениеСпасибо за совет, я и сам хотел так сделать, но для этого сначала хочу файл немного поменять (его структуру с таблицами и диаграммами), чтоб все стояли по порядку.
Я только учусь программированию. Поэтому и макроссы такие большие :(

Автор - inohodec
Дата добавления - 04.12.2015 в 12:22
Эх_Прорвёмся Дата: Пятница, 04.12.2015, 12:52 | Сообщение № 7
Группа: Заблокированные
Ранг: Участник
Сообщений: 72
Репутация: -21 ±
Замечаний: 100% ±

Excel 2003
inohodec,
Ну так а Ваш вопрос решился?


Объяснять как бабушке на скамеечке у подъезда.
 
Ответить
Сообщениеinohodec,
Ну так а Ваш вопрос решился?

Автор - Эх_Прорвёмся
Дата добавления - 04.12.2015 в 12:52
SLAVICK Дата: Пятница, 04.12.2015, 12:57 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Вот попробуйте так:
[vba]
Код
Sub вставить_диограммы()
Dim d As ChartObject, p As Shape, c As Range
Sheets(1).Select
For Each d In Sheets(1).ChartObjects
    n = d.Name
    n = n & "_01.01.2016"
    d.Copy
    With Sheets(n)
        Set c = .[a7]
        .Activate
        .PasteSpecial Format:="Метафайл Windows (EMF)", Link:=False, DisplayAsIcon:=False
        Set p = .Shapes(1)
        p.Left = c.Left: p.Top = c.Top: p.Name = d.Name
        p.LockAspectRatio = False
        p.Height = 436.5354330709
        p.Width = 714.3307086614
    End With
Next
End Sub
[/vba]
К сообщению приложен файл: _42_1.xlsm (31.9 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеВот попробуйте так:
[vba]
Код
Sub вставить_диограммы()
Dim d As ChartObject, p As Shape, c As Range
Sheets(1).Select
For Each d In Sheets(1).ChartObjects
    n = d.Name
    n = n & "_01.01.2016"
    d.Copy
    With Sheets(n)
        Set c = .[a7]
        .Activate
        .PasteSpecial Format:="Метафайл Windows (EMF)", Link:=False, DisplayAsIcon:=False
        Set p = .Shapes(1)
        p.Left = c.Left: p.Top = c.Top: p.Name = d.Name
        p.LockAspectRatio = False
        p.Height = 436.5354330709
        p.Width = 714.3307086614
    End With
Next
End Sub
[/vba]

Автор - SLAVICK
Дата добавления - 04.12.2015 в 12:57
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Имя диаграммы (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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