Это сложная и интересная проблема, и я признаю, что это большинство решения, но есть недостающая часть.Я мало занимался программированием в Powerpoint, так что это было непросто.Когда вы открываете VBE, нет доступных модулей, классов или объектов.Это сильно отличается от Word и Excel.Это означает, что мы все сами по себе ...
Я создал презентацию с пятью слайдами.На третьем слайде я вставил несколько объектов, чтобы они выглядели так:
Для части VBA первое, что я должен был выучить, было:создайте модуль класса , который будет перехватывать все события для презентации .Мой очень простой класс называется EventClassModule
и выглядит так:
Option Explicit
Public WithEvents App As Application
Private Sub App_SlideShowNextSlide(ByVal Wn As SlideShowWindow)
If Wn.View.CurrentShowPosition = 3 Then
UpdateTheCount Wn.View.Slide
End If
End Sub
Так что теперь в обычном модуле вам нужно запустить что-то, чтобы создать и инициализировать этот класс как глобальный объект.
Option Explicit
Dim eventClass As EventClassModule
Sub InitializeApp()
Set eventClass = New EventClassModule
Set eventClass.App = Application
End Sub
В моем тестировании я просто вручную запустил процедуру InitializeApp
для создания глобального объекта. Это недостающая часть моего решения ... - Я не знаю, как автоматически запустить эту инициализацию для создания объекта.Может быть, кнопка ленты?
Затем, также в модуле обычного кода есть процедура обновления текстового поля:
Public Sub UpdateTheCount(ByRef thisSlide As Slide)
'--- loop through all the shapes to find the correct textbox,
' then update the value for display
Const LABEL_TEXT As String = "Value to update:"
Dim shp As Shape
For Each shp In thisSlide.Shapes
If shp.Type = msoTextBox Then
Dim theText As String
theText = shp.TextFrame.TextRange.Text
If InStr(1, theText, LABEL_TEXT, vbTextCompare) = 1 Then
Dim colonPos As Long
Dim theValue As Long
colonPos = InStr(1, theText, ":", vbTextCompare)
theValue = CLng(Right$(theText, Len(theText) - colonPos))
theValue = theValue + 1
theText = LABEL_TEXT & " " & theValue
shp.TextFrame.TextRange.Text = theText
End If
End If
Next shp
End Sub
Как только ваш код будет на месте, и выВы запустили подпрограмму InitializeApp()
вручную, просто запустите слайд-шоу (и, вероятно, установите его в цикле с конца) и пройдитесь по нему.Значение текстового поля будет обновляться и увеличиваться автоматически.
Я заинтересован в том, чтобы узнать, как автоматически запустить его у кого-то, кто получил такой опыт.