我正在尝试创建一个 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)
请帮忙 :)
呜呜呜!!!首先非常感谢@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
真的很简单:)