2009-11-11 7 views
7

Weiß jemand, was die Zukunft für die VBA/VSTO-Programmierung in PowerPoint bedeutet? Ich habe an einem Office-Automatisierungsprojekt gearbeitet und finde es frustrierend, insbesondere mit PowerPoint zu arbeiten, da es scheinbar eine Stufe unter der VBA-Unterstützung in Excel oder Word liegt.Gibt es eine Zukunft für PowerPoint VBA/VSTO?

Es fühlt sich an, als ob MS versucht, die Unterstützung für VBA in PowerPoints auslaufen zu lassen, da sie Makroaufnahmen in Version 2007 fallen ließen und das Objektmodell einige wichtige Funktionen nicht unterstützt.

+0

Dies ist sehr alt, aber für andere (wie ich selbst) Für Möglichkeiten, mit PowerPoint (oder anderen Office-Programmen) programmgesteuert zu arbeiten, könnte dies von Interesse sein: https://github.com/NetOfficeFw/NetOffice – RenniePet

Antwort

8

Ich bin nicht sicher, ob dies die Antwort ist, die Sie hören möchten, aber die Entwicklung in PowerPoint mit VBA ist eigentlich gut. Ich mache ziemlich viel davon (sowie Word und Excel) und es ist robust genug. Der PowerPoint-OM, der mit VBA programmiert werden kann, wird mit jeder neuen Version von PPT aktualisiert. In PPT 2007 können Sie benutzerdefiniertes XML gegen beliebiges Objekt auf einer Folie erstellen - weit leistungsfähiger als Optionen in Excel und Word. Im Gegensatz dazu verfügt Word 2007 über Inhaltssteuerelemente, von denen PPT profitieren würde, wenn es sich bei PPT um einen leichten Crystal Reports-Ersatz handelt. In PPT 2010 (Beta) können Sie beispielsweise SmartArt programmgesteuert wie mit Word/Excel 2010 erstellen. Sie können auch mit Medienelementen programmatisch besser als zuvor arbeiten. VSTO bietet aus OM-Sicht nicht viel mehr als VBA.

Es hängt vielleicht nur von Ihren Bedürfnissen ab - erstellen Sie Standard-Bullet-Folien? Machst du erweiterte Animation? Machst du Bericht? Erstellen Sie eLearning-Apps? Wenn Sie spezielle Fragen zum OM haben, können wir versuchen, Ihnen hier zu helfen (aber vielleicht gibt es das Feature einfach nicht).

Vereinbart, dass das Entfernen der Makro-Recorder irgendwie gesaugt, das war ein nützliches Feature. Auch das direkte Arbeiten mit der PML/DML ist schmerzhaft. Es gibt Dinge, von denen ich wünsche, dass die OM sie auch unterstützt. Aber in Übereinstimmung mit der Höhlenforschung glaube ich nicht, dass VBA in absehbarer Zeit verschwinden wird.


HINWEIS: DIES NICHT ARBEITEN. Es wird nur als Ausgangspunkt zur Verfügung gestellt, wenn FOLKEN versuchen möchten, dies in etwas zu entwickeln, das funktionieren kann (, wenn Sie es zur Arbeit bringen können, wenden Sie sich bitte an diesen Beitrag zu bearbeiten).

  1. Erstellen Sie eine Klasse "clsPPTEvents" genannt
  2. Einfügen in den folgenden Code.

    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. In einem regulären Modul können Sie Start/das Ereignis aufhören mit dieser Handhabung:

    Public newPPTEvents As New clsPPTEvents 
    Sub StartEvents() 
        Set newPPTEvents.PPTEvent = Application 
    End Sub 
    Sub EndEvents() 
        Set newPPTEvents.PPTEvent = Nothing 
    End Sub 
    

Beachten Sie, dass in dem Code in # 2, es nicht wegen der nicht funktioniert was GetCursorPos zurückgibt, das ist der Bildschirm X, Y.Wenn man sich das Ereignis anschaut, scheint es, dass das, was das GetChartElement will, entweder die Koordinaten des Fensters oder des Bereichs der Begrenzungsbox oder nur die des Diagramms selbst ist.

+0

Danke für die Antworten Otaku und Höhlenforschung! In unserer Firma haben wir viele Präsentationen mit eingebetteten Charts und es war eine schmerzhafte Entwicklung. 2007 SP2 verbesserte den OM (+) und verursachte mehr Absturz (-), aber sie hinterließen immer noch Lücken. Beispiel: Sie können feststellen, dass ein Benutzer auf ein Diagramm geklickt hat, aber Sie können nicht erkennen, welches Diagrammelement ausgewählt ist. Ich habe das 2010 noch nicht ausprobiert. –

+0

Ich habe ein bisschen mehr darüber getan. Es scheint, dass, während die GetChartElement-Methode in PPT verfügbar ist, es nicht (leicht?) Zugegriffen werden kann, da kein Ereignis vorhanden ist, das die richtigen (Fenster-, nicht Bildschirm-) X-, Y-Koordinaten liefern würde. Es gibt viele Beispiele, die gut für Excel funktionieren, aber die gleichen funktionieren nicht in PowerPoint. Ich habe versucht, mit dem GetCursorPos-API-Aufruf und dem WindowSelectionChange-Ereignis herumzuspielen, um die X-, Y-Werte zu erhalten, hatte aber nicht viel Glück. Dies scheint eine vollständige Übersicht von Microsoft zu sein, diese Methode zur Verfügung zu stellen, aber in PowerPoint nutzlos gemacht. –

4

Powerpoint war noch nie eine beliebte Plattform für die VBA-Entwicklung. Ich kann die UI-Funktionen für VBA in diesem Kontext löschen. Es ist sehr einfach, VBA-Unterstützung für Powerpoint mit der Stärke von Excel und Word zu integrieren - die nicht bald, wenn überhaupt, weggehen wird. Mein Geld wird langfristig auf die Unterstützung von Legacy beschränkt sein, mit schlechter bis nicht existierender Unterstützung von Microsoft für Probleme.

Denken Sie daran, dass bei MS alles um Abwärtskompatibilität geht - und sie sind sehr vorsichtig, wenn sie es fallen lassen.

+0

Ich denke, dass diese Kommentare weitgehend wahr sind. Ich denke, das Problem der Makrorekorder ist jedoch komplexer. Wenn Sie graben, werden Sie verschiedene Referenzen von Microsoft finden, die besagen, dass, wenn sie das Diagramm neu erstellten und Teile des OM im Jahr 2007 formten, dies Auswirkungen auf den Makro-Recorder-Code hatte. –

1

Ich stimme zu PPT ist deutlich unter anderen VBA. Vor allem es Buggy sehen scheint Weird bug on powerpoint vba

Modell Veranstaltung ist umständlich wie kein Auto Ausführung How to automatically trigger the App Object initialization in Powerpoint?

auto_open ist nur möglich in Circumvoluted Weise durch die Schaffung eines Addin was Nutzer, die Ihre ppt empfängt und weiß nicht, wie das Plugin installieren :(

+0

Ich stimme dieser Antwort nicht zu. Es scheint, dass du die Antwort in der Frage erhalten hast, mit der du verlinkt hast ... http://skp.mvps.org/autoevents.htm Auch warum ist das Erstellen eines Add-Ins eine "schlechte Sache"? In fast jeder Umgebung, in der ich gearbeitet habe, möchte ich sicherstellen, dass alle Benutzer Zugriff auf den Code haben. Daher ist das Packen des Codes mit der PPT-Datei eine schlechte Übung. –

0

diesen article Siehe für die Zusammenfassung, warum VSTO der Weg zu gehen ist. Vergleichbar mit VBA für Excel, aber gleiche gilt auch für Powerpoint.

+0

Ihr Artikel ist eine gute Diskussion über VBA vs VSTO; Dies geht jedoch nicht auf die Frage ein, die sich mit der PowerPoint-Automatisierung und ihrer Unterstützung beschäftigt. – Mathias

+0

Ja, stimme Mathias zu, fühle mich, als müsste ich dich wirklich ablehnen, aber der Link war Qualität. :) Ich bin sicher, andere werden nicht so freundlich sein, wenn du deine Antwort hinterlässt. xie xie für den Link Bhuvan –

+0

2012 ist gekommen und gegangen und jetzt mit Office 2013 ..... gut Programmgesteuert mit dem DataModel OM Ein neues DataModel-Objektmodell (Teil des VBA-Objektmodells) ermöglicht das programmgesteuerte Laden und Aktualisieren Datenquellen. – mooseman