我正在使用PowerPoint 2016进行Wallboard显示,我希望它从MSSQL-Server表中提取一个数字。我可以很容易地将SQL数据输入到Powerpoint中,但是我希望数据每天自动刷新并保持墙板连续运行。
我在幻灯片上有一个文本框,可从SQL VBA脚本中提取数据。有没有一种方法可以在演示文稿运行时每次显示幻灯片时自动运行脚本,或者每24小时运行一次脚本以刷新文本框?
答案 0 :(得分:0)
这是一个棘手且有趣的问题,我承认这是解决方案的最,但是缺少一部分。我在Powerpoint中没有做太多编程,所以这是一个挑战。当您打开VBE时,没有任何可用的模块,类或对象。这与Word和Excel完全不同。这意味着我们全靠自己...
我创建了一个演示文稿,其中包含五张幻灯片。在第三张幻灯片上,我插入了一些对象,看起来像这样:
对于VBA,我必须学习的第一件事是创建一个class module that will catch all of the events for the presentation。我非常简单的类称为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()
子级,就可以开始幻灯片放映(并可能将其设置为从头开始循环播放)并逐步执行。文本框值将自动更新和增加。
我有兴趣学习如何从有经验的人那里自动将其开始。