Не съм сигурен дали това е отговорът, който искате да чуете, но разработката в PowerPoint с VBA всъщност е добра. Правя доста от него (както и Word и Excel) и е достатъчно здрав. PowerPoint OM, който може да се програмира с VBA, се актуализира с всяка от новите версии на PPT. В PPT 2007 можете да създадете персонализиран XML срещу всеки обект на слайд - много по-мощен от наличните опции в Excel и Word. За разлика от това, Word 2007 има контроли за съдържанието, от които, за да може PPT да бъде някакъв лек заместител на Crystal Reports, би се възползвал. В PPT 2010 (бета) можете да създадете програмно SmartArt, например, както можете с Word/Excel 2010. Можете също така да работите програмно с медийни елементи по-добре от преди. VSTO, от гледна точка на OM, обаче не предлага много повече от VBA.
Може обаче да зависи само от вашите нужди - създавате ли стандартни слайдове с куршуми? Правите ли разширена анимация? Правите ли репортажи? Създавате ли „приложения“ за електронно обучение? Ако имате конкретни въпроси относно OM, можем да се опитаме да ви помогнем тук (но може би функцията просто не съществува).
Съгласих се, че премахването на записващото устройство за макроси беше доста гадно, това беше полезна функция. Директната работа с PML/DML също е болка. Има неща, които бих искал OM също да поддържа. Но в съответствие с спелеологията, не вярвам, че 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