Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Power Point, Динамика данных в презентации 
:(
    Опции темы
Гость_Unregistered
Дата 22.8.2005, 02:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте. Возможно ли динамическое представление данных в уже собранной презентации?
Идея такая: Презентация постоянно отображает некоторые данные. Данные разбиты на логические группы слайдами. Эти данные меняются. Соответственно, презентация, при каждом следующем показе слайда, показывает уже обновленные данные. Источником данных для презентации пусть служит текстовый файл. Хотя, по большому счету, это значения не имеет. Возможно ли такое реализовать и что для этого нужно сделать?
  Вверх
likhobory
Дата 22.8.2005, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 466
Регистрация: 17.5.2005
Где: Москва

Репутация: 10
Всего: 20



Цитата
зачем тогда вообще связи делать какие-то, c OLE мудрить

если данные из источника вставляются в неизменном виде, то предложенный способ гораздо проще
Цитата
куда этот код вписать

1. в VBE создаем модуль класса , допустим Class1 (переименуй на свое усмотрение) и объявляем в нем соотв. объектную переменную:
Код
Public WithEvents App As PowerPoint.Application

здесь же обрабатываем все события объекта
Код
Private Sub App_SlideShowEnd(ByVal Pres As Presentation)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'вычисляем значение NewName (либо меняем путь к NewName, 
'либо  - данные по указанному пути) - и вперед...
With ActivePresentation
   .Slides(1).Shapes(1).LinkFormat.SourceFullName=NewName
   .UpdateLinks
   .Saved = msoTrue
End With
End Sub


Если презентация идет непрерывным циклом, то меняем все здесь
Код
Private Sub App_SlideShowNextSlide(ByVal Wn As SlideShowWindow)
'''''''''''''''''''''''''
End Sub

2. в обычном модуле прописываем
Код
Public pp As New Class1

Sub PressME()
Set pp.App = Application
End Sub

3. связываем стартовую процедуру(2) с каким-либо элементом 1-го слайда: из контекстного меню: настройка действия -запуск макроса.
Наверняка есть более элегантные способы автозапуска, но я в РР глубоко не копал, а аналог autoexec в PPoint отсутствует



--------------------
PM MAIL   Вверх
Гость_Unregistered
Дата 23.8.2005, 08:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо, вроде получилось.
Сделал для начала так:

Код

Private Sub App_SlideShowNextSlide(ByVal Wn As SlideShowWindow)

i=i+1

ActivePresentation.Slides(2).Shapes(2).TextFrame.TextRange.Text = i

End Sub



текст надписи меняется соответственно значению переменной "i". Все хорошо.

А чтоб было совсем хорошо, надо знать какой сейчас слайд будут показывать и в соответствии с этим уже что-то предпринимать. )) Это видно из приведенного кода: переменная увеличивается каждый раз при смене каждого слайда.
  Вверх
likhobory
Дата 23.8.2005, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 466
Регистрация: 17.5.2005
Где: Москва

Репутация: 10
Всего: 20



Код

Private Sub App_SlideShowNextSlide(ByVal Wn As SlideShowWindow)
''''''''''''''''''
'получаем ссылку на след. слайд
Set NextSlide = Wn.View.Slide
NextSlideName = NextSlide.Name
NextSlideShapeLink = NextSlide.Shapes(1).LinkFormat.SourceFullName
'''''''''''''''''''



--------------------
PM MAIL   Вверх
Гость_Unregistered
Дата 24.8.2005, 03:10 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Эх, рано я радовался. smile Такой облом. Во время выполнения ничего не меняется! Только во время выполнения при запущенном редакторе. Похоже, что макросы не выполняются при простом показе. Как это обойти? Ставить два монитора? Тогда кайфу от задумки остается 10%. smile Даже и того меньше smile
  Вверх
likhobory
Дата 24.8.2005, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 466
Регистрация: 17.5.2005
Где: Москва

Репутация: 10
Всего: 20



Цитата
Похоже, что макросы не выполняются при простом показе
если выполнены все три пункта, предложеные во 2 посте, то все должно работать. Кстати, как именно реализован третий пункт (каким событием запускаем PressME) ??



--------------------
PM MAIL   Вверх
Гость_Unregistered
Дата 24.8.2005, 15:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как ты и написал: связываем стартовую процедуру(2) с каким-либо элементом 1-го слайда: из контекстного меню: настройка действия -запуск макроса.
Связал с объектом вордарт-а на первом слайде smile.
Код где обновляются данные зашит вот в это:
Цитата

Если презентация идет непрерывным циклом, то меняем все здесь

Код


 Private Sub App_SlideShowNextSlide(ByVal Wn As SlideShowWindow)
  '''''''''''''''''''''''''
End Sub



В этом коде я соединяюсь с MSSQLServer2000 и вытягиваю данные из однной таблички.




  Вверх
likhobory
Дата 24.8.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 466
Регистрация: 17.5.2005
Где: Москва

Репутация: 10
Всего: 20



вероятно, ты меня недопонял
Цитата
Связал с объектом вордарт-а на первом слайде
если есть завязка на событие объекта (в данном случае - вордарт), то для запуска всей "бодяги" это событие должно произойти, например, если выбрано из контекстного меню объекта: настройка действия ->по щелчку мыши/по наведении указателя->запуск макроса, то ты должен при запуске презентации кликнуть (или указать...) на этом объекте, т.о. первый слайд будет "стартовым" для всей презентации
если же смена слайдов идет автоматом, то предлагаю в настройке презентации-смена слайдов указать "вручную" (дабы случайно не пропустить первый слайд), а при запуске макроса поменять соотв. параметр на "по времени"
Код

Sub PressME()    
Set pp.App = Application
ActivePresentation.SlideShowSettings.AdvanceMode = ppSlideShowUseSlideTimings
''''''''''''''''''''''''''''''''''''''''''''''''    
End Sub


Это сообщение отредактировал(а) likhobory - 24.8.2005, 16:54


--------------------
PM MAIL   Вверх
Гость_Unregistered
Дата 25.8.2005, 00:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Фу ты, елки! Ну конечно! Все работает нормально. Спасибо выручил. Я ведь в VBA подОфис не в зуб ногой. Простопришлось чем-то плазму заполнять, вот я и подумал, поинт +динамика=то что нужно. И с эффектами и оперативная инфа постоянно. Теперь буду вылизывать презентацию. Хочу в итоге получить полностью автоматизированную (добавление новых слайдов и т.д. и т.п.)
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0677 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.