Есть ли будущее у PowerPoint VBA/VSTO?
Кто-нибудь знает, что ждет в будущем программирование VBA/VSTO в PowerPoint? Я работал над проектом автоматизации Office, и мне было неприятно работать с PowerPoint, в частности, так как он кажется на один уровень ниже поддержки VBA, обнаруженной в Excel или Word.
Такое ощущение, что MS пытается постепенно отказаться от поддержки VBA в PowerPoints, так как они прекратили запись макросов в версии 2007, а объектной модели не хватает поддержки некоторых ключевых функций.
4 ответа
Я не уверен, что этот ответ вы хотите услышать, но разработка в PowerPoint с VBA на самом деле хороша. Я делаю довольно много (а также Word и Excel), и это достаточно надежно. PowerPoint OM, который можно запрограммировать с помощью VBA, обновляется с каждой новой версией PPT. В PPT 2007 вы можете создавать пользовательский XML для любого объекта на слайде - гораздо более мощный, чем параметры, доступные в Excel и Word. В отличие от этого, в Word 2007 есть средства управления контентом, которые, для PPT, должны быть полезны. В PPT 2010 (бета) вы можете программно создавать, например, SmartArt, как в Word/Excel 2010. Вы также можете программно работать с элементами мультимедиа лучше, чем раньше. VSTO, с точки зрения OM, не предлагает намного больше, чем VBA.
Это может зависеть только от ваших потребностей - вы создаете стандартные слайды? Вы делаете расширенную анимацию? Вы делаете отчетность? Вы создаете "приложения" электронного обучения? Если у вас есть конкретные вопросы по ОМ, мы можем попытаться помочь вам здесь (но, возможно, эта функция просто не существует).
Договорились, что удаление макродиска вроде как засосало, это была полезная функция. Непосредственная работа с PML/DML также является проблемой. Есть вещи, которые я бы хотел, чтобы ОМ тоже поддерживал. Но в то же время я не верю, что VBA скоро уйдет.
ПРИМЕЧАНИЕ: ЭТО НЕ РАБОТАЕТ. ЭТО ПРЕДОСТАВЛЯЕТСЯ ТОЛЬКО НАЧАЛЬНОЙ ТОЧКОЙ, ЕСЛИ НАРОДЫ ХОТЯТ ПОПРОБОВАТЬ РАЗВИТИЕ ЭТОГО ЧТО-ТО, ЧТО МОЖЕТ РАБОТАТЬ (если вы можете заставить его работать, пожалуйста, не стесняйтесь редактировать этот пост).
- Создайте класс под названием "clsPPTEvents"
Вставьте следующий код.
Public WithEvents PPTEvent As Application Private Declare Function GetCursorPos Lib "user32" (ByVal lpPoint As POINTAPI) As Long Private Type POINTAPI x As Long y As Long End Type Dim ret As Long Dim mousePosition As POINTAPI Private Sub PPTEvent_WindowSelectionChange(ByVal Sel As Selection) Dim ElementID As Long Dim Arg1 As Long Dim Arg2 As Long With Sel If .Type = ppSelectionShapes Then Dim sr As ShapeRange sr = .ShapeRange If sr.Type = msoChart Then Dim sh As Shape Dim slideNumber As Integer slideNumber = ActiveWindow.View.Slide.SlideIndex sh = ActivePresentation.Slides(slideNumber).Shapes(sr.Name) Dim crt As Chart crt = sh.Chart H = ActiveWindow.Height w = ActiveWindow.Width ret = GetCursorPos(mousePosition) x = mousePosition.x y = mousePosition.y crt.GetChartElement(x, y, ElementID, Arg1, Arg2) MsgBox("X: " & x & ", Y: " & y & vbNewLine & _ "ElementID: " & ElementID & ", Arg1: " & Arg1 & ", Arg2: " & Arg2) End If End If End With End Sub
В обычном модуле вы можете запустить / остановить обработку событий следующим образом:
Public newPPTEvents As New clsPPTEvents Sub StartEvents() Set newPPTEvents.PPTEvent = Application End Sub Sub EndEvents() Set newPPTEvents.PPTEvent = Nothing End Sub
Обратите внимание, что в коде #2 он не работает из-за того, что возвращает GetCursorPos, то есть экран X, Y. При просмотре события выясняется, что то, что хочет GetChartElement, это либо координаты ограничивающего окна окна, либо панели, или только сама диаграмма.
Powerpoint никогда не была популярной платформой для разработки VBA. Я могу понять, что в этом контексте можно отказаться от функций пользовательского интерфейса для VBA. Tt очень легко включить поддержку VBA для Powerpoint в силу Excel и Word - что скоро не исчезнет, если вообще. Мои деньги пойдут на устаревшую поддержку в долгосрочной перспективе, а помощь от бедных или вообще не будет.
Помните, что MS - все о обратной совместимости - и они очень осторожны, когда отбрасывают ее.
Я согласен, что PPT значительно ниже других VBA. Прежде всего, кажется, глючит увидеть странный баг на PowerPoint VBA
Событие модели неудобно, как и отсутствие автоматического выполнения. Как автоматически запустить инициализацию объекта приложения в Powerpoint?
auto_open возможно только в обходной манере, создавая надстройку для пользователей, которые получают ваш ppt и не знают, как установить плагин:(
Смотрите эту статью, чтобы подвести итог, почему VSTO - это путь. Сравнивает с VBA для Excel, но то же самое относится и к Powerpoint.