2009-11-11 18 views
7

¿Alguien sabe lo que depara el futuro para la programación de VBA/VSTO en PowerPoint? He estado trabajando en un proyecto de automatización de Office y encuentro frustrante trabajar con PowerPoint en particular, ya que parece estar un nivel por debajo del soporte de VBA que se encuentra en Excel o Word.¿Hay un futuro para PowerPoint VBA/VSTO?

Parece que MS está intentando eliminar el soporte para VBA en PowerPoints desde que cayeron la macroregistro en la versión 2007 y el modelo de objetos carece de soporte para algunas características clave.

+0

esto es muy antigua, pero para otros (como yo mismo) buscando para conocer las formas de trabajar con PowerPoint (u otros programas de Office) mediante programación esto puede ser de interés: https://github.com/NetOfficeFw/NetOffice – RenniePet

Respuesta

8

No estoy seguro de si esta es la respuesta que desea escuchar, pero el desarrollo en PowerPoint con VBA es realmente bueno. Hago bastante (además de Word y Excel) y es bastante robusto. El PowerPoint OM que se puede programar en contra con VBA se actualiza con cada una de las nuevas versiones de PPT. En PPT 2007, puede crear XML personalizado contra cualquier objeto en una diapositiva, mucho más potente que las opciones disponibles en Excel y Word. Por el contrario, Word 2007 tiene controles de contenido, que, para que PPT sea una especie de reemplazo liviano de Crystal Reports, se beneficiaría. En PPT 2010 (beta), puede crear SmartArt mediante programación, por ejemplo, como puede hacerlo con Word/Excel 2010. También puede trabajar mediante programación con elementos de medios mejor que antes. VSTO, desde una perspectiva de OM, no ofrece mucho más que VBA.

Aunque puede depender de sus necesidades, ¿crea diapositivas de viñetas estándar? ¿Haces animación extendida? ¿Usted informa? ¿Estás creando "aplicaciones" de eLearning? Si tiene preguntas específicas sobre el OM, podemos intentar ayudarlo aquí (pero tal vez la función simplemente no existe).

Estoy de acuerdo en que eliminar el tipo de grabadora de macros absorbida, esa fue una característica útil. Trabajar directamente con PML/DML también es un problema. Hay cosas que me gustaría que el OM también apoyara. Pero al coincidir con la espeleología, no creo que VBA vaya a desaparecer pronto.


NOTA: esto no funciona. SE PROPORCIONA SÓLO COMO UN PUNTO DE PARTIDA SI FOLKS QUIERE INTENTAR DESARROLLAR ESTO EN ALGO QUE PUEDA FUNCIONAR (si puede hacerlo funcionar, no dude en editar esta publicación).

  1. Crear una clase llamada "clsPPTEvents"
  2. Pegar en el código siguiente.

    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. En un módulo regular, puede iniciar/detener el control de eventos con esto:

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

Tenga en cuenta que en el código en el # 2, no funciona debido lo que devuelve GetCursorPos, que es la pantalla X, Y.Al observar el evento, parece que lo que quiere GetChartElement es la ventana o las coordenadas del cuadro delimitador del panel o solo el gráfico mismo.

+0

Gracias por las respuestas Otaku y espeleología! En nuestra firma hacemos muchas presentaciones con Gráficos incrustados y ha sido un desarrollo doloroso. 2007 SP2 mejoró el OM (+) y causa más bloqueos de gráfico (-) pero aún así dejaron huecos. Ejemplo: puede ver que un usuario hizo clic en un gráfico, pero no puede decir qué elemento del gráfico está seleccionado. Todavía no lo he probado en 2010. –

+0

He revisado un poco más sobre esto. Parece que si bien el método GetChartElement está disponible en PPT, no se puede acceder (¿fácilmente?) Debido a la falta de cualquier evento que proporcione las coordenadas X, Y adecuadas (ventana, no pantalla). Hay muchos ejemplos que funcionan bien para Excel, pero los mismos simplemente no funcionan en PowerPoint. Intenté jugar con la API GetCursorPos y el evento WindowSelectionChange para obtener los valores X, Y, pero no he tenido mucha suerte. Esto parece un completo descuido de Microsoft para hacer que este método esté disponible, pero se vuelve inútil en PowerPoint. –

4

Powerpoint nunca ha sido una plataforma popular para el desarrollo de VBA. Puedo entender la eliminación de las características de la interfaz de usuario para VBA en ese contexto. Es muy fácil incluir soporte de VBA para Powerpoint con la fortaleza de Excel y Word, que no desaparecerá pronto, si es que lo hace. Mi dinero se destinará al soporte de legado a largo plazo, con asistencia de Microsoft deficiente a inexistente para problemas.

Recuerde que MS se trata de compatibilidad con versiones anteriores, y son muy cuidadosos cuando lo dejan.

+0

Creo que estos comentarios son en gran parte ciertos. Creo que el problema del grabador de macros es más complejo. Si cavas, encontrarás varias referencias de Microsoft que indican que cuando redirigieron el gráfico y formaron partes del OM en 2007, esto tuvo un efecto en el código del grabador de macros. –

1

Estoy de acuerdo PPT está muy por debajo de otros vba. Por encima de todo lo que parece con errores ver Weird bug on powerpoint vba

caso modelo es torpe como ninguna ejecución automática How to automatically trigger the App Object initialization in Powerpoint?

auto_open sólo es posible en forma circumvoluted mediante la creación de un complemento qué pasa con los usuarios que recibe el ppt y no saben cómo para instalar el plugin :(

+0

No estoy de acuerdo con esta respuesta. Parece que le dieron la respuesta en la pregunta a la que se vinculó ... http://skp.mvps.org/autoevents.htm Además, ¿por qué crear un complemento es "algo malo"? En casi cualquier entorno en el que haya trabajado, quiere asegurarse de que todos los usuarios tengan acceso al código, por lo tanto, empaquetar el código con el archivo ppt es una mala práctica. –

0

ver este article para resumir qué VSTO es el camino a seguir. Compara con VBA para Excel, pero lo mismo se aplica para PowerPoint también.

+0

Su artículo es una buena discusión sobre VBA VSTO; sin embargo, esto no aborda la cuestión, que gira en torno a la automatización de PowerPoint y su apoyo. – Mathias

+0

Sí, estoy de acuerdo con Mathias, siento que realmente debería rechazarte, pero el enlace fue de calidad. :) Estoy seguro de que los demás no serán tan amables si dejas tu respuesta. xie xie para el enlace Bhuvan –

+0

2012 ha venido y se ha ido y ahora con Office 2013 ..... bien mediante programación del DataModel OM Un nuevo modelo de objeto DataModel (parte del modelo de objetos VBA) le permite cargar y actualizar mediante programación fuentes de datos. – mooseman