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).
- Crear una clase llamada "clsPPTEvents"
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
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.
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