VBA Powerpoint - 打开时自动运行并在后台运行

Luc*_*ens 2 powerpoint vba

我正在尝试创建一个 PowerPoint 演示文稿,该演示文稿将显示自工作场所受伤以来的天数。

当用户第一次打开演示文稿时,我希望运行一个宏,提示输入自上次受伤以来的日期。到目前为止,我有这个似乎工作正常:-

Sub EveryDayAccidents()
Dim injdate As String
Dim lastdate As String
Dim injfree As Integer
Dim BnrMsg As String

'This Macro defines the latest injury date

injdate = InputBox("Please enter last injury date in this format:  dd/mm/yyyy")
lastdate = injdate
injfree = DateDiff("d", injdate, Now)
BnrMsg = injfree
ActivePresentation.Slides(3).Shapes("Accidents").TextFrame.TextRange = BnrMsg
End Sub
Run Code Online (Sandbox Code Playgroud)

我缺少的是一些代码或其他子代码,它们会在演示文稿打开时调用此代码。

当日期自然变化时,文本框会更新还是需要在后台运行某些内容来更新文本框?计划是让演示文稿中的幻灯片循环运行,直到发生事故,然后将其重置并重新开始。

任何帮助将非常感激!!

编辑

所以现在我有了这个:-

Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
 If SSW.View.CurrentShowPosition = 3 Then

     injdate = ActivePresentation.Slides(3).Shapes("Accidents").TextFrame.TextRange
     injfree = DateDiff("d", injdate, Now)
     BnrMsg = injfree
     ActivePresentation.Slides(3).Shapes("Accidents").TextFrame.TextRange = BnrMsg

 End If
End Sub
Run Code Online (Sandbox Code Playgroud)

当演示文稿运行时,它会更新幻灯片......但它将文本框中的数字视为实际日期(65 变成 05/03/1900),这意味着我的日期差异在 41,600 的区域内。 . 我想做的是暂时完全忽略日期。

如果我在文本框中输入一个数字(比如 1),那么我希望该数字每天增加 1,我认为这段代码目前无论如何都会这样做,但我缺乏转换的技能:-

injfree = DateDiff("d", injdate, Now)
Run Code Online (Sandbox Code Playgroud)

进入

injfree = injfree + 1 when date changes (garbage i know)
Run Code Online (Sandbox Code Playgroud)

请帮忙 :)

Luc*_*ens 5

呜呜呜!!!首先非常感谢@David Zemens 和@Steve Ringsberg!

我设法想出了一个解决方案,可能会在未来帮助其他人,所以这是最终结果。这样做的好处是不需要插件或其他任何东西,结果 anwser 最终非常简单......

对于我想要执行此操作的每张幻灯片,我在单独的模块中都有以下代码以保持清晰,唯一的区别是变量、幻灯片编号和文本框名称。

Sub OnSlideShowPageChange(ByVal SSW As SlideShowWindow)
 If SSW.View.CurrentShowPosition = 2 Then

     actdate = ActivePresentation.Slides(2).Shapes("Last Prod").TextFrame.TextRange
     injfree = DateDiff("d", actdate, Now)
     BnrMsg = injfree
     ActivePresentation.Slides(2).Shapes("Activity").TextFrame.TextRange = BnrMsg

 End If
 End Sub
Run Code Online (Sandbox Code Playgroud)

这段代码的作用是,当演示文稿的当前位置到达幻灯片 2,3 等时运行演示文稿时,它将运行附加到该幻灯片的代码。在这里,我使用了一个实际上不在幻灯片上的小文本框并输入了开始日期。然后代码将该日期命名为“actdate”,然后找出该日期与当前日期之间的差异,然后更新第二个文本框在幻灯片上显示差异值。

因此,如果“Last Prod”(文本框)= 01/01/2014 并且当前日期是 02/01/2014 那么“Activity”(文本框)= 1

真的很简单:)