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).
- Erstellen Sie eine Klasse "clsPPTEvents" genannt
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
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.
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