Има ли бъдеще за PowerPoint VBA/VSTO? [затворено]

Някой знае ли какво е бъдещето за програмирането на VBA/VSTO в PowerPoint? Работя по проект за автоматизация на Office и намирам за разочароващо да работя с PowerPoint по-специално, тъй като изглежда, че е едно ниво под поддръжката на VBA, намираща се в Excel или Word.

Има чувството, че MS се опитва постепенно да премахне поддръжката за VBA в PowerPoint, тъй като те изпуснаха записа на макроси във версия 2007 и обектният модел няма поддръжка на някои ключови функции.


person Sam Russo    schedule 11.11.2009    source източник
comment
Това е много старо, но за други (като мен), които търсят начини да работят с PowerPoint (или други програми на Office) програмно това може да представлява интерес: github.com/NetOfficeFw/NetOffice   -  person RenniePet    schedule 02.09.2017


Отговори (4)


Не съм сигурен дали това е отговорът, който искате да чуете, но разработката в PowerPoint с VBA всъщност е добра. Правя доста от него (както и Word и Excel) и е достатъчно здрав. PowerPoint OM, който може да се програмира с VBA, се актуализира с всяка от новите версии на PPT. В PPT 2007 можете да създадете персонализиран XML срещу всеки обект на слайд - много по-мощен от наличните опции в Excel и Word. За разлика от това, Word 2007 има контроли за съдържанието, от които, за да може PPT да бъде някакъв лек заместител на Crystal Reports, би се възползвал. В PPT 2010 (бета) можете да създадете програмно SmartArt, например, както можете с Word/Excel 2010. Можете също така да работите програмно с медийни елементи по-добре от преди. VSTO, от гледна точка на OM, обаче не предлага много повече от VBA.

Може обаче да зависи само от вашите нужди - създавате ли стандартни слайдове с куршуми? Правите ли разширена анимация? Правите ли репортажи? Създавате ли „приложения“ за електронно обучение? Ако имате конкретни въпроси относно OM, можем да се опитаме да ви помогнем тук (но може би функцията просто не съществува).

Съгласих се, че премахването на записващото устройство за макроси беше доста гадно, това беше полезна функция. Директната работа с PML/DML също е болка. Има неща, които бих искал OM също да поддържа. Но в съответствие с спелеологията, не вярвам, че 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 иска, е или координатите на прозореца или прозореца, ограничаващи полето, или просто самата диаграма.

person Todd Main    schedule 26.11.2009
comment
Благодаря за отговорите Отаку и пещерата! В нашата фирма правим много презентации с вградени графики и това беше болезнено развитие. 2007 SP2 подобри OM (+) и причинява повече сривове в диаграмата (-), но все още остави пропуски. Пример: можете да кажете, че даден потребител е щракнал върху диаграма, но не можете да кажете кой елемент от диаграмата е избран. Все още не съм пробвал това през 2010 г. - person Sam Russo; 17.12.2009
comment
Проверих още малко това. Изглежда, че докато методът GetChartElement е наличен в PPT, той не може (лесно?) да бъде достъпен поради липсата на каквото и да е събитие, което да предостави правилните (прозорец, не екран) X,Y координати. Има много примери, които работят добре за Excel, но същите просто не работят в PowerPoint. Опитах да си играя с извикването на API GetCursorPos и ​​събитието WindowSelectionChange, за да получа стойностите X,Y, но нямах много късмет. Това наистина изглежда като пълен пропуск от страна на Microsoft, за да направи този метод достъпен, но безполезен в PowerPoint. - person Todd Main; 29.12.2009

Powerpoint никога не е бил популярна платформа за разработка на VBA. Мога да разбера премахването на UI функции за VBA в този контекст. Много е лесно да се включи поддръжка на VBA за Powerpoint на базата на Excel и Word - което няма да изчезне скоро, ако изобщо. Парите ми ще бъдат за наследена поддръжка в дългосрочен план, със слаба или несъществуваща помощ от Microsoft за проблеми.

Не забравяйте, че MS е свързана изцяло с обратна съвместимост - и те са много внимателни, когато го изоставят.

person caving    schedule 24.11.2009
comment
Мисля, че тези коментари са до голяма степен верни. Мисля обаче, че проблемът с макро рекордера е по-сложен. Ако се разровите, ще намерите различни препратки от Microsoft, в които се посочва, че когато са преработили частите от диаграмата и формата на OM през 2007 г., това е имало ефект върху кода за запис на макроси. - person Anonymous Type; 28.06.2012

Съгласен съм, че PPT е доста под другите vba. Преди всичко изглежда, че има грешки, вижте Странна грешка в powerpoint vba

Събитието на модела е неудобно като липса на автоматично изпълнение Как да задействам автоматично инициализацията на App Object в Powerpoint?

auto_open е възможно само по заобиколен начин чрез създаване на добавка, какво да кажем за потребителите, които получават вашия ppt и не знаят как да инсталират приставката :(

person user310291    schedule 05.06.2010
comment
Не съм съгласен с този отговор. Изглежда, че сте получили отговор във въпроса, към който сте дали връзка... skp.mvps.org/autoevents. htm Освен това защо създаването на добавка е лошо нещо? В почти всяка среда, в която съм работил, искате да сте сигурни, че всички потребители имат достъп до кода, следователно пакетирането на кода с ppt файла е лоша практика. - person Anonymous Type; 28.06.2012

Вижте тази статия, за да обобщите защо VSTO е Браво. Сравнява се с VBA за Excel, но същото важи и за Powerpoint.

person Bhuvan    schedule 02.01.2012
comment
Вашата статия е добра дискусия за VBA срещу VSTO; това обаче не отговаря на въпроса, който се върти около автоматизацията на PowerPoint и нейната поддръжка. - person Mathias; 02.01.2012
comment
Да, съгласен съм с Матиас, чувствам, че наистина трябва да гласувам против теб, но връзката беше качествена. :) Сигурен съм, че другите няма да бъдат толкова любезни, ако оставите отговора си. xie xie за връзката Bhuvan - person Anonymous Type; 28.06.2012
comment
2012 дойде и си отиде и сега с Office 2013..... добре Програмно използване на DataModel OM Нов обектен модел DataModel (част от обектния модел на VBA) ви позволява програмно да зареждате и опреснявате източници на данни. - person mooseman; 21.02.2013
comment
Установихме, че VSTO е много ограничаващ и все още използва стария COM API. Това работи чудесно и можете да напишете всичко на C#. - person David Thielen; 22.08.2014