Я создаю слайд-шоу, чтобы отобразить некоторые статистические данные из таблицы SQL. Макрос не хочет запускаться, если я не запускаю его вручную один раз, поэтому я создал простой тест, чтобы увидеть, было ли это что-то с вызовом sql. Делаем это в PPT 2016.
Новая презентация с 3 слайдами, титульным листом и двумя для данных. Создано текстовое поле на слайдах 2 и 3. Сохранено как .pptm
Sub OnSlideShowPageChange()
Dim i As Integer
i = ActivePresentation.SlideShowWindow.View.CurrentShowPosition
If i = 1 Then Call ChangeData
End Sub
Sub ChangeData()
If ActivePresentation.Slides(2).Shapes("TextBox 1").TextFrame.TextRange.Text = "Answer 1" Then
ActivePresentation.Slides(2).Shapes("TextBox 1").TextFrame.TextRange.Text = "Answer A"
ActivePresentation.Slides(3).Shapes("TextBox 1").TextFrame.TextRange.Text = "Answer B"
Else
ActivePresentation.Slides(2).Shapes("TextBox 1").TextFrame.TextRange.Text = "Answer 1"
ActivePresentation.Slides(3).Shapes("TextBox 1").TextFrame.TextRange.Text = "Answer 2"
End If
End Sub
Закройте презентацию. Откройте презентацию и запустите слайд-шоу. Он циклически перебирает 3 слайда и повторяет, как я хочу, но «данные» не меняются. Esc слайд-шоу и вручную запустить макрос ChangeData. Начните слайд-шоу снова. Теперь он циклически просматривает слайды и изменяет данные по своему усмотрению.
Есть идеи, почему сначала требуется запуск макроса? Я хотел бы перейти прямо к слайд-шоу или, что еще лучше, использовать средство просмотра ppt.
Редактировать:
После просмотра больше я нашел эту тему Как вы запускаете код vba при изменениислайды в powerpoint?
Итак, добавили ActiveX TextBox и удалили слайд со следующим кодом для элемента управления
Private Sub TextBox1_Initialize()
End Sub
Интересно, на презентации теста мне нужно нажать натитульный слайд, чтобы начать слайд-шоу, но когда я включаю элемент управления в свою фактическую презентацию, он работает просто отлично, без необходимости нажимать на первый слайд. Я также протестировал сохранение своей презентации в формате ppsm, и она все еще работает. Можно изменить данные sql и обновить таблицу слайдов по своему усмотрению.
Я включил предложение Сэма о Sub OnSlideShowPageChange(ByVal Wn As SlideShowWindow)
, а также протестировал его как orig и обе работы. Я также проверил, добавив метку ActiveX, но это не сработало, должен был быть TextBox или, возможно, другой, но не как метка.