Форум программистов, компьютерный форум, киберфорум
MS Office Powerpoint
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/26: Рейтинг темы: голосов - 26, средняя оценка - 4.50
самый вменяемый тролль
564 / 52 / 8
Регистрация: 19.09.2012
Сообщений: 189
1

Разорвать программно связи при сохранении

17.03.2014, 09:31. Просмотров 5415. Ответов 20
Метки нет (Все метки)

Добрый день.
Есть "шаблон" (на самом деле обычный документ, т.к. экспериментально я дошёл до того, что сами шаблоны связи вовсе не поддерживают) презентации, который подтягивает несколько екселек.
Вообще программа максимум - прописать кнопку, при нажатии на которую менялась бы одна надпись на слайде (дата), а сама презентация сохранялась бы по заданному пути с сгенерированным именем при этом разрывая связи.
Ну максимум-МАКСИМУМ: что бы пользователь открыл "шаблон", тот проделал всё сам без каких либо диалогов и закрылся, а пользователю показал бы готовую презентацию без связей. Было бы безопасней, если бы с "шаблоном" мог работать только его "разработчик". Но я понимаю, что планы наполеоновские, так что на всё сразу не надеюсь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.03.2014, 09:31
Ответы с готовыми решениями:

Макрос: обновление связи с другим файлом при сохранении
Здравствуйте, столкнулся с такой проблемкой: есть формула...

Ошибка при сохранении книги программно
Друзья, помогите пожалуйста! Написал макрос: Sub Mover2() Dim wb As Workbook Set wb =...

При сохранении в файл формата xlsx выпадает сообщение о сохранении шаблона
Такая дурацкая штука получается при сохранении в файл формата xlsx - выпадает сообщение о...

AkelPad, при сохранении "Символы будут утеряны при сохранении в этой кодировке"
Иногда при сохранении текстового файла в AkelPad появляется окно: Строка "12" содержит символы,...

20
Ушел с CyberForum совсем!
871 / 180 / 25
Регистрация: 04.05.2011
Сообщений: 1,020
Записей в блоге: 110
17.03.2014, 12:33 2
а в каком приложении у тебя макрос сидит: PowerPoint или Excel ?
0
самый вменяемый тролль
564 / 52 / 8
Регистрация: 19.09.2012
Сообщений: 189
17.03.2014, 12:57  [ТС] 3
пока макроса вовсе нет, всё формируется связями, но логичнее родить его в PowerPoint. Но я так и не нашёл рекордера,.. это серьёзно осложняет изучение нового поприща)
0
Ушел с CyberForum совсем!
871 / 180 / 25
Регистрация: 04.05.2011
Сообщений: 1,020
Записей в блоге: 110
17.03.2014, 13:03 4
Цитата Сообщение от Евгений С Посмотреть сообщение
Но я так и не нашёл рекордера,.. это серьёзно осложняет изучение нового поприща)
начиная с 2007 версии в нем нет рекордера !
я что-то не осилил как внедрить диаграмму из существующего экселя в поверпойнт, способом отличным от копи/паста…
0
5459 / 2815 / 538
Регистрация: 23.11.2010
Сообщений: 9,298
17.03.2014, 13:28 5
Ctrl+V - диаграмма будет связанной, а таблица - только вставка объекта/связать
0
самый вменяемый тролль
564 / 52 / 8
Регистрация: 19.09.2012
Сообщений: 189
17.03.2014, 13:38  [ТС] 6
это сделано. Всё вставлено и функционирует. Теперь вопрос в наведении лоска, что бы ни кто не забыл разорвать связь, прежде, чем копировать на флешку и лучше вообще не трогал готовый "шаблон".
0
5459 / 2815 / 538
Регистрация: 23.11.2010
Сообщений: 9,298
17.03.2014, 13:43 7
По логике, при открывании он запросит об обновлении связей, если "нет", тогда останутся только значения. Или не так?
0
самый вменяемый тролль
564 / 52 / 8
Регистрация: 19.09.2012
Сообщений: 189
17.03.2014, 16:13  [ТС] 8
Fairuza, да. Так и происходит.
Открываешь файл, выскакивает диалоговое окно, с предложением обновить связи, после обновления разрываешь связи, меняешь дату на одном слайде и сохраняешь под именем "Презентация дата"
Хотелось бы все эти телодвижения передать бездушной машине и всунуть между строк:

Visual Basic
1
2
3
Sub Workbook_Open()
....
End Sub
но даже первая строчка, видимо, неправильная, поскольку рабочие книги были в Екселе... тут я, после нажатия альт+Ф11, вообще ни чего предустановленного не вижу, даже на что вешать саб "опен" непонятно...
Понимаю, что за меня делать должно быть лень, можете хотя бы мануалы показать?...
0
Ушел с CyberForum совсем!
871 / 180 / 25
Регистрация: 04.05.2011
Сообщений: 1,020
Записей в блоге: 110
17.03.2014, 17:14 9
по ходу этот ваш PowerPoint какая-то дичайше бестолковая вещь
что-то я в объектной модели не найду где прописывается связь с источником диаграммы

Добавлено через 46 секунд
а что у тебя в вба редакторе нет кнопки вызова хелпа ?
0
самый вменяемый тролль
564 / 52 / 8
Регистрация: 19.09.2012
Сообщений: 189
17.03.2014, 17:18  [ТС] 10
Surrogate, чую, чад кутежа дичайший намечается...
Я понимаю, что спасение утопающих дело рук самих утопающих, но...
ты редлагаешь мне промном весь хелп перевести?
0
Ушел с CyberForum совсем!
871 / 180 / 25
Регистрация: 04.05.2011
Сообщений: 1,020
Записей в блоге: 110
17.03.2014, 17:27 11
Евгений С,
у меня дома например есть офис2003, а там макрорекордер

Добавлено через 1 минуту
по ходу надо копать вокруг SetSourceData

Добавлено через 58 секунд
ну а вообще все не надо, а только то что связано с диаграммами Chart

Добавлено через 4 минуты
всё это просто будет адово!
0
5459 / 2815 / 538
Регистрация: 23.11.2010
Сообщений: 9,298
17.03.2014, 17:35 12
Евгений С, здесь не пробовали поискать? https://www.cyberforum.ru/vba/
0
самый вменяемый тролль
564 / 52 / 8
Регистрация: 19.09.2012
Сообщений: 189
17.03.2014, 18:52  [ТС] 13
Fairuza, специфика той ветки, на сколько я знаю, ориентирована в основном на Ексель либо на общие случаи составления алгоритма/программы, не привязанной к объектной модели приложения (типа "хеллоу ворлд")...
Если модераторы решат перенести топик, я не против, хотя казалось, тут он уместнее.
0
5459 / 2815 / 538
Регистрация: 23.11.2010
Сообщений: 9,298
17.03.2014, 18:59 14
Евгений С, ну не скажите.. , там много чего интересного, а вот тут https://www.cyberforum.ru/vba/thread79292.html. Я не про перенос, а поискать чего
0
самый вменяемый тролль
564 / 52 / 8
Регистрация: 19.09.2012
Сообщений: 189
17.03.2014, 19:07  [ТС] 15
Fairuza, конечно идёт процесс, но гуглится быстрее описание конкретной функции, метода тд тп, а не просто "PowerPoint это чё ваще?"
Спасибо за ссылку.
0
Ушел с CyberForum совсем!
871 / 180 / 25
Регистрация: 04.05.2011
Сообщений: 1,020
Записей в блоге: 110
18.03.2014, 11:22 16
попробуй
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub pptDeleteLinks()
Dim CHD As ChartData
Set p = Application.ActivePresentation
    For Each sli In p.Slides
        For Each SHP In sli.Shapes
            If SHP.Type = msoPlaceholder Then
                If SHP.PlaceholderFormat.ContainedType = msoChart Then
                    Set CHD = SHP.Chart.ChartData
                With CHD
                .BreakLink
                End With
                End If
            ElseIf SHP.Type = msoChart Then  ' здесь у меня работает удаление связей
                Set CHD = SHP.Chart.ChartData
                With CHD
                .BreakLink
                End With
            End If
        Next SHP
    Next sli
End Sub
Добавлено через 11 минут
идею с перебором слайдов и шейпов, беззастенчиво украл здесь

Добавлено через 15 часов 7 минут
красивых кнопок не делал, но в целом код выполняет все заявленные функции
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Sub ppt_SaveWithBreakedLinks()
Dim fn As String
fn = "C:\1\presentation_" & Format(Date, "dd_MM_yyyy") 
Dim p As Presentation
set p = ActivePresentation
p.SaveAs "c:\1\etalon.ppt" ' сохраняем исходную копию
Dim CHD As ChartData
Set p = Application.ActivePresentation
    For Each sli In p.Slides ' перебираем все слайды презентации
        For Each SHP In sli.Shapes ' перебираем шейпы на слайде
            If SHP.Type = msoPlaceholder Then ' если текущий шейп типа msoPlaceholder
                If SHP.PlaceholderFormat.ContainedType = msoChart Then ' если текущий шейп типа msoPlaceholder 
                                                                       ' содержит диаграмму
                    Set CHD = SHP.Chart.ChartData
                With CHD
                .BreakLink  ' удаляем связь
                End With
                End If
            ElseIf SHP.Type = msoChart Then  ' если текущий шейп типа диаграма
                Set CHD = SHP.Chart.ChartData 
                With CHD
                .BreakLink ' удаляем связь
                End With
            End If
        Next SHP
    Next sli
p.SaveAs fn, ppSaveAsDefault  ' сохраняем файл с покоцанными связями
End Sub
Женя, кто бежит за Клинским ?

Добавлено через 24 минуты

Не по теме:

Цитата Сообщение от Fairuza Посмотреть сообщение
Ctrl+V - диаграмма будет связанной, а таблица - только вставка объекта/связать
Цитата Сообщение от Fairuza Посмотреть сообщение
По логике, при открывании он запросит об обновлении связей, если "нет", тогда останутся только значения. Или не так?
я изменил файл в экселе. в презентации ничего не обновилось автоматически и не предложил пнуть, чтоб произвелось обновление.
это я печалюсь, что у меня ничего не обновляется

0
5459 / 2815 / 538
Регистрация: 23.11.2010
Сообщений: 9,298
18.03.2014, 12:53 17
Surrogate, выводы моего эксперимента. Ctrl+V - действительно диаграмма встает связанной. При открытых связанных документах, при изменении диаграммы в Excel - автоматическое изменение в презентации.
После сохранения и открытия, обновление почему-то происходит не автоматически, отметка стоит "вручную". Отметила "автоматически" - закрыла/открыла - снова отметка "вручную". Видимо надо где-то отметить автоматическое обновление, наверное в Параметрах презентации.
Видимо из-за этого "вручную" и не происходит запрос на обновление связей при открывании.
При этом, при обновлении не открывает Excel, просто изменяются данные.
Пока все)))) дальше не стала ковыряться))))
0
Ушел с CyberForum совсем!
871 / 180 / 25
Регистрация: 04.05.2011
Сообщений: 1,020
Записей в блоге: 110
18.03.2014, 14:46 18
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Sub ppt_SaveWithBreakedLinks()
Dim xls As Object
Dim wbk As Object
Set xls = CreateObject("excel.application") ' запускаем Эксель
xls.Visible = True
Set wbk = xls.Workbooks.Open("c:\test\test4.xlsx") ' открываем ексель с исходными диаграмами
Dim fn As String
fn = "C:\1\presentation_" & Format(Date, "dd_MM_yyyy") 
Dim p As Presentation
set p = ActivePresentation
p.SaveAs "c:\1\etalon.ppt" ' сохраняем исходную копию
Dim CHD As ChartData
p.SaveAs fn, ppSaveAsDefault  ' сохраняем текущую копию файла
Set p = Application.ActivePresentation
    For Each sli In p.Slides ' перебираем все слайды презентации
        For Each SHP In sli.Shapes ' перебираем шейпы на слайде
            If SHP.Type = msoPlaceholder Then ' если текущий шейп типа msoPlaceholder
                If SHP.PlaceholderFormat.ContainedType = msoChart Then ' если текущий шейп типа msoPlaceholder 
                                                                       ' содержит диаграмму
                    Set CHD = SHP.Chart.ChartData
                With CHD
                .Activate
                .BreakLink  ' удаляем связь
                End With
                End If
            ElseIf SHP.Type = msoChart Then  ' если текущий шейп типа диаграма
                Set CHD = SHP.Chart.ChartData 
                With CHD
                .Activate
                .BreakLink ' удаляем связь
                End With
            End If
        Next SHP
    Next sli
p.Save  ' сохраняем файл с покоцанными связями
wbk.Close
xls.Quit
Set wbk = Nothing
Set xls = Nothing
End Sub
Добавлено через 2 минуты
Евгений С, похоже в этот раз тебе придется угощать пивом не только меня !
Fairuza, тоже очень помогла
1
самый вменяемый тролль
564 / 52 / 8
Регистрация: 19.09.2012
Сообщений: 189
18.03.2014, 16:05  [ТС] 19
вот только разгребу работу, что бы горизонт был виден и согласуем встречу
ЗЫ Клинское моветон, оно пьётся только на "нашествии".
Всем спасибо за поддержку.
0
Surrogate
18.03.2014, 16:23     Разорвать программно связи при сохранении
  #20

Не по теме:

Дык Клинское это просто винрарный мем :)
ты же знаешь мою любовь к нефильтрованному баварскому

0
18.03.2014, 16:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2014, 16:23
Привет! Вот еще темы с ответами:

можно ли в HTMLе не разорвать объект при печати? например, таблицу...
а?

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

Как программно обновить внешние связи в mdb
Delphi, к базам mdb подключаюсь через ADO. В проекте 2 базы - 1 постоянная для всех...

Управление беспроводными сетями - программно (получение качества связи)
Появилась необходимость в статус баре качества беспроводного сигнала! Так как средствами C# это...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.