2009-11-11 7 views
7

Est-ce que quelqu'un sait ce que l'avenir réserve à la programmation VBA/VSTO dans PowerPoint? J'ai travaillé sur un projet de bureautique et trouve frustrant de travailler avec PowerPoint en particulier, car il semble y avoir un niveau inférieur au support VBA trouvé dans Excel ou Word. Il semble que MS tente de supprimer progressivement la prise en charge de VBA dans PowerPoints depuis qu'ils ont supprimé l'enregistrement de macros en version 2007 et que le modèle d'objet ne prend pas en charge certaines fonctionnalités clés.Existe-t-il un avenir pour PowerPoint VBA/VSTO?

+0

Ceci est très vieux, mais pour d'autres (comme moi-même) Pour des façons de travailler avec PowerPoint (ou d'autres programmes Office) par programme cela peut être intéressant: https://github.com/NetOfficeFw/NetOffice – RenniePet

Répondre

8

Je ne suis pas sûr si c'est la réponse que vous voulez entendre, mais le développement dans PowerPoint avec VBA est réellement bon. J'en fais pas mal (ainsi que Word et Excel) et il est assez robuste. Le PowerPoint OM qui peut être programmé contre avec VBA est mis à jour avec chacune des nouvelles versions de PPT. Dans PPT 2007, vous pouvez créer du code XML personnalisé contre n'importe quel objet sur une diapositive - bien plus puissant que les options disponibles dans Excel et Word. En revanche, Word 2007 a des contrôles de contenu, qui, pour que PPT soit un remplacement léger de type Crystal Reports, bénéficierait. Dans PPT 2010 (version bêta), vous pouvez créer par programme SmartArt, par exemple, comme vous le pouvez avec Word/Excel 2010. Vous pouvez également travailler par programme avec les éléments média mieux qu'avant. VSTO, d'un point de vue OM, n'offre pas beaucoup plus que VBA.

Cependant, cela dépend de vos besoins: créez-vous des diapositives standard? Est-ce que tu fais de l'animation prolongée? Faites-vous des rapports? Créez-vous des "applications" eLearning? Si vous avez des questions spécifiques sur l'OM, ​​nous pouvons essayer de vous aider ici (mais peut-être que la fonctionnalité n'existe tout simplement pas). Il est convenu que retirer le type d'enregistreur de macros de l'aspirateur, ce qui était une fonctionnalité utile. Travailler directement avec la PML/DML est également une douleur. Il y a des choses que j'aimerais que l'OM soutienne également. Mais en accord avec la spéléologie, je ne crois pas que VBA s'en ira de sitôt.


NOTE: CE NE FONCTIONNE PAS. IL EST FOURNI UNIQUEMENT COMME POINT DE DÉPART SI LES GENS VEULENT ESSAYER DE DÉVELOPPER CELA DANS QUELQUE CHOSE QUI POURRAIT FONCTIONNER (si vous pouvez le faire fonctionner, n'hésitez pas à éditer cet article).

  1. Créer une classe appelée "clsPPTEvents"
  2. Coller dans le code suivant.

    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. Dans un module régulier, vous pouvez démarrer/arrêter la gestion des événements avec ceci:

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

Notez que dans le code # 2, il ne fonctionne pas à cause de ce que GetCursorPos renvoie, qui est l'écran X, Y.En regardant l'événement, il apparaît que ce que le GetChartElement veut, c'est soit les coordonnées de la fenêtre de délimitation de la fenêtre ou du volet, soit simplement le graphique lui-même.

+0

Merci pour les réponses Otaku et la spéléologie! Dans notre cabinet nous faisons beaucoup de présentations avec des graphiques intégrés et cela a été un développement douloureux. 2007 Le SP2 a amélioré le OM (+) et a causé plus de plantage du graphique (-) mais ils ont tout de même laissé des trous. Exemple: vous pouvez dire qu'un utilisateur a cliqué sur un graphique mais que vous ne pouvez pas dire quel élément de graphique est sélectionné. Je n'ai pas encore essayé cela en 2010. –

+0

J'ai fait un peu plus de vérification à ce sujet. Il semble que, bien que la méthode GetChartElement soit disponible dans PPT, elle ne peut pas (facilement?) Être accédée en raison de l'absence de tout événement qui fournirait les coordonnées X, Y (fenêtre, pas écran) appropriées. Il y a beaucoup d'exemples qui fonctionnent bien pour Excel, mais les mêmes ne fonctionnent pas dans PowerPoint. J'ai essayé de jouer avec l'appel d'API GetCursorPos et l'événement WindowSelectionChange pour obtenir les valeurs X, Y, mais je n'ai pas eu beaucoup de chance. Cela semble être un oubli complet de Microsoft pour rendre cette méthode disponible, mais rendue inutile dans PowerPoint. –

4

Powerpoint n'a jamais été une plate-forme populaire pour le développement VBA. Je peux comprendre l'abandon des fonctionnalités de l'interface utilisateur pour VBA dans ce contexte. Tt est très facile d'inclure le support de VBA pour Powerpoint sur la force d'Excel et Word - qui ne disparaîtra pas bientôt, voire pas du tout. Mon argent sera sur le support d'héritage à long terme, avec l'assistance pauvre ou inexistante de Microsoft pour des problèmes. Rappelez-vous que la MS est une question de compatibilité descendante - et ils sont très prudents lorsqu'ils la laissent tomber.

+0

Je pense que ces commentaires sont en grande partie vrai. Je pense que la question du macro enregistreur est plus complexe. Si vous creusez, vous trouverez diverses références de Microsoft indiquant que lorsqu'elles ont refait le graphique et façonné des parties de l'OM en 2007, cela a eu un effet sur le code de l'enregistreur de macros. –

1

Je suis d'accord PPT est bien en dessous d'autres vba. Par-dessus tout, il semble bogué voir Weird bug on powerpoint vba

événement modèle est maladroit comme aucune exécution automatique How to automatically trigger the App Object initialization in Powerpoint?

auto_open est possible que de manière circumvoluted en créant un Addin ce que sur les utilisateurs qui reçoit votre ppt et ne savent pas comment installer le plugin :(

+0

Je ne suis pas d'accord avec cette réponse. Il semble que vous avez reçu la réponse à la question que vous avez liée ... http://skp.mvps.org/autoevents.htm Aussi, pourquoi créer un addin est-il une "mauvaise chose"? Dans presque tous les environnements dans lesquels j'ai travaillé, vous voulez vous assurer que tous les utilisateurs ont accès au code, donc empaqueter le code avec le fichier ppt est une mauvaise pratique. –

0

Voir ce article pour résumer pourquoi VSTO est le chemin à parcourir. Compares avec VBA pour Excel, mais même chose vaut pour Powerpoint aussi.

+0

Votre article est une bonne discussion sur VBA vs VSTO; Cependant, cela ne répond pas à la question, qui tourne autour de l'automatisation PowerPoint et de son support. – Mathias

+0

Ouais d'accord avec Mathias, je pense que je devrais vraiment vous downvote, mais le lien était de qualité. :) Je suis sûr que les autres ne seront pas si gentils si vous laissez votre réponse. xie xie pour le lien Bhuvan –

+0

2012 est passé et maintenant avec Office 2013 ..... bien Programmation avec le DataModel OM Un nouveau modèle objet DataModel (faisant partie du modèle objet VBA) vous permet de charger et de rafraîchir par programme les sources de données. – mooseman