Есть ли будущее у 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 скоро уйдет.


ПРИМЕЧАНИЕ: ЭТО НЕ РАБОТАЕТ. ЭТО ПРЕДОСТАВЛЯЕТСЯ ТОЛЬКО НАЧАЛЬНОЙ ТОЧКОЙ, ЕСЛИ НАРОДЫ ХОТЯТ ПОПРОБОВАТЬ РАЗВИТИЕ ЭТОГО ЧТО-ТО, ЧТО МОЖЕТ РАБОТАТЬ (если вы можете заставить его работать, пожалуйста, не стесняйтесь редактировать этот пост).

  1. Создайте класс под названием "clsPPTEvents"
  2. Вставьте следующий код.

    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
    
  3. В обычном модуле вы можете запустить / остановить обработку событий следующим образом:

    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.

Другие вопросы по тегам