обновить текстовое поле, когда слайд PowerPoint отображается - PullRequest
0 голосов
/ 13 февраля 2019

Я использую PowerPoint 2016 для настенного дисплея, и мне бы хотелось, чтобы он извлек число из таблицы MSSQL-Server.Я могу достаточно легко помещать данные SQL в Powerpoint, но мне бы хотелось, чтобы данные обновлялись каждый день автоматически, а настенный экран работал непрерывно.

У меня есть текстовое поле на слайде, которое извлекает данные из сценария SQL VBA.Есть ли способ автоматически запускать скрипт при каждом показе слайда во время работы презентации или запускать скрипт каждые 24 часа, чтобы обновить текстовое поле?

1 Ответ

0 голосов
/ 13 февраля 2019

Это сложная и интересная проблема, и я признаю, что это большинство решения, но есть недостающая часть.Я мало занимался программированием в Powerpoint, так что это было непросто.Когда вы открываете VBE, нет доступных модулей, классов или объектов.Это сильно отличается от Word и Excel.Это означает, что мы все сами по себе ...

Я создал презентацию с пятью слайдами.На третьем слайде я вставил несколько объектов, чтобы они выглядели так:

enter image description here

Для части 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() вручную, просто запустите слайд-шоу (и, вероятно, установите его в цикле с конца) и пройдитесь по нему.Значение текстового поля будет обновляться и увеличиваться автоматически.

Я заинтересован в том, чтобы узнать, как автоматически запустить его у кого-то, кто получил такой опыт.

...