Я не уверен, что это тот ответ, который вы хотите услышать, но разработка в PowerPoint с помощью VBA на самом деле хороша. Я использую его довольно часто (а также Word и Excel), и он достаточно надежен. OM PowerPoint, которую можно запрограммировать с помощью VBA, обновляется с каждой новой версией PPT. В PPT 2007 вы можете создать собственный XML для любого объекта на слайде — гораздо более мощные возможности, чем в Excel и Word. Напротив, в Word 2007 есть средства управления содержимым, которые, если PPT станет своего рода облегченной заменой Crystal Reports, принесут пользу. В PPT 2010 (бета-версия) вы можете программно создавать SmartArt, например, как в Word/Excel 2010. Вы также можете программно работать с мультимедийными элементами лучше, чем раньше. Однако VSTO, с точки зрения OM, предлагает не намного больше, чем VBA.
Это может зависеть только от ваших потребностей — вы создаете стандартные слайды? Делаете ли вы расширенную анимацию? Вы делаете отчетность? Вы создаете «приложения» для электронного обучения? Если у вас есть конкретные вопросы по OM, мы можем попытаться помочь вам здесь (но, возможно, эта функция просто не существует).
Согласен, что удаление макрорекордера было отстойным, это была полезная функция. Непосредственная работа с PML/DML также является проблемой. Есть вещи, которые я бы хотел, чтобы ОМ также поддерживал. Но, учитывая спелеотуризм, я не верю, что VBA исчезнет в ближайшее время.
ПРИМЕЧАНИЕ: ЭТО НЕ РАБОТАЕТ. ЭТО ПРЕДОСТАВЛЯЕТСЯ ТОЛЬКО В КАЧЕСТВЕ ОТПРАВНОЙ ТОЧКИ, ЕСЛИ ЛЮДИ ХОТЯТ ПОПЫТАТЬСЯ РАЗВИВАТЬ ЭТО В ЧТО-ТО, ЧТО МОЖЕТ РАБОТАТЬ (если вы можете заставить это работать, не стесняйтесь редактировать это сообщение).
- Создайте класс под названием «clsPPTEvents».
Вставьте следующий код.
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
В обычном модуле вы можете запустить/остановить обработку события следующим образом:
Public newPPTEvents As New clsPPTEvents
Sub StartEvents()
Set newPPTEvents.PPTEvent = Application
End Sub
Sub EndEvents()
Set newPPTEvents.PPTEvent = Nothing
End Sub
Обратите внимание, что в коде в № 2 это не работает из-за того, что возвращает GetCursorPos, то есть экран X, Y. Глядя на событие, кажется, что GetChartElement хочет получить либо координаты ограничивающей рамки окна или панели, либо только сам график.
person
Todd Main
schedule
26.11.2009