【问题标题】:refresh textbox when powerpoint slide is shown显示PowerPoint幻灯片时刷新文本框
【发布时间】:2019-07-07 12:34:29
【问题描述】:

我将 PowerPoint 2016 用于墙板显示,我希望它从 MSSQL-Server 表中提取一个数字。我可以很容易地将 SQL 数据导入 Powerpoint,但我希望数据每天自动刷新并让墙板持续运行。

我在幻灯片上有一个文本框,可以从 SQL VBA 脚本中提取数据。有没有办法在演示文稿运行时每次显示幻灯片时自动运行脚本,或者让脚本每 24 小时运行一次以刷新文本框?

【问题讨论】:

    标签: sql-server vba powerpoint


    【解决方案1】:

    这是一个棘手而有趣的问题,我承认这是大部分的解决方案,但有一个缺失的部分。我没有在 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() 子程序,只需开始幻灯片放映(并且可能将其设置为从结尾处循环播放)并逐步进行。文本框的值会自动更新和递增。

    我有兴趣从有这种经验的人那里学习如何自动启动它。

    【讨论】:

    • 我应该补充一点,我试图使课程持久化 (PredeclaredID=True),当我重新打开它时它使我的 PowerPoint 崩溃了。可能还有其他问题,但我没有找到。
    • 这看起来很有趣。我去看看。
    • @PeterT 回复:“当您打开 VBE 时,没有可用的模块、类或对象”Intellisense 会有所帮助,或者与其他 Office 应用程序的 VBE 一样,按 F2 键查看对象浏览器,其中列出了 PPT 自己的类等。当然,在您将它们添加到当前打开文件的项目或其他打开文件中的项目之前,没有任何模块。除非您修改注册表,否则您看不到加载项中的模块/类。
    • 如果将 PeterT 的代码保存为 Add-in,则可以包含 Auto_Open 子程序;这将在加载项加载时自动运行(在 PPT 启动时,一旦您安装了加载项)。重新使所有这些定期运行,将更新代码编写为 VBScript 甚至使用 COM 驱动 PowerPoint 的 EXE 可能更简单,然后设置 Windows 调度程序以每天启动一次脚本/EXE。
    • @SteveRindsberg...谢谢!这是缺失部分的真正答案。我应该考虑加载项解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2020-10-14
    • 1970-01-01
    • 2011-02-26
    相关资源
    最近更新 更多