如何在屏幕上的任意位置左键单击在 PowerPoint 中运行宏

How to run macro in PowerPoint with a left click anywhere on screen

提问人:Sander Van Beuningen 提问时间:11/5/2023 最后编辑:JohnMSander Van Beuningen 更新时间:11/6/2023 访问量:47

问:

我复制了代码以在 PowerPoint 中创建数字计时器。它是可见的,但我希望当我在屏幕上的任意位置左键单击或按键盘上的向下箭头时显示并运行它(转到下一个操作 - 例如下一张幻灯片或下一个动画)。有人知道怎么做吗?

Sub countdown()

Dim time As Date
time = Now()

Dim count As Integer
count = 30 'assuming 30 seconds

time = DateAdd("s", count, time)

Do Until time < Now()
DoEvents
ActivePresentation.SlideShowWindow.View.Slide.Shapes("countdown").TextFrame.TextRange = Format((time - Now()), "ss")
Loop

End Sub
VBA 幻灯片

评论

0赞 Steve Rindsberg 11/5/2023
若要获得单击操作以触发宏,请在整个幻灯片顶部绘制一个矩形,为其分配“运行宏 - {您的子例程名称]”的单击操作。然后给矩形一个实心填充,100% 透明,没有轮廓。对于其他内容,请在 Google 中查找 PowerPoint 事件处理程序以获取想法。
0赞 FaneDuru 11/5/2023
每张幻灯片中是否有一个名为“倒计时”的形状? 引用活动幻灯片(视图)中的形状...我可以向您展示一种使上述代码在每次单击/按下箭头时运行的方法(这会更改幻灯片),但是只有当所有幻灯片中都存在这样的形状时,您的代码才有效。否则,如果活动幻灯片中不存在这样的形状,它将引发错误......ActivePresentation.SlideShowWindow.View.Slide.Shapes("countdown")

答:

1赞 FaneDuru 11/6/2023 #1

正如我在上面的评论中尝试解释的那样,只有当所有幻灯片中都有一个名为“倒计时”的形状时,您才不会引发错误!Sub

  1. 您需要一个能够触发 PowerPoint 事件的类。因此,在项目中插入一个类模块,将其命名为“clsPPEvents”,并将下一个代码粘贴到其中:
Option Explicit

Public WithEvents App As Application


Private Sub App_SlideShowNextClick(ByVal Wn As SlideShowWindow, ByVal nEffect As Effect) 'merge in SlideShow
    Debug.Print "SlideShowSlideShowNextClick" 'just to see that the event has been triggered...
    countdown
End Sub
  1. 请复制标准模块中的下一个代码。它将初始化上述类以触发 PowerPoint 的事件:Application
Option Explicit

Public myApp As New clsPPEvents

Sub EnableEvents()
   Set myApp.App = Application
End Sub
  1. 当您的演示文稿打开时,必须调用上述内容。由于当时未启用 PowerPoint 事件,因此您需要找到一种方法来初始化类。它可以通过加载项(稍微复杂一些)或使用事件(在打开所需的演示文稿时触发)来完成。我将向您展示第二种方式。SubRibbon

一个。复制同一标准模块或新(标准)模块中的下一个代码。我通常会创建一个名为“RibbonModule”的新标准模块:

Public Sub onLoadRibbon(myRibbon As IRibbonUI)
  Debug.Print "Ribbon Loaded" 'just to see that it has been called
  EnableEvents 'initialize the events class
End Sub

保存演示文稿并将其关闭

b.上述代码必须在加载期间由 Ribbon 调用。因此,您需要下载“Office RibbonX 编辑器”(从这里。下载 zip 存档,将其内容解压缩到特定文件夹中,然后运行 .要了解如何使用它,请观看以下视频。它显示了如何在 Excel 功能区中使用,但必须以与 PowerPoint 完全相同的方式使用。CustomUIEditor.exe

因此,复制下一个 XML 代码,在 inserted (for Office 2010 or recent than it)customUI14.xml

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"
onLoad="onLoadRibbon" ></customUI>

或者 Office 2007 中的下一个:customUI.xml

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="onLoadRibbon" ></customUI>

插入这两个演示文稿将在高于 2007 的所有 Office 版本(包括 2007 版本)中正常工作。custom UI

按下可检查XML代码是否正确,如果正确,请按按钮。ValidateSave

  1. 当然,你要被调用的 you 必须存在于标准模块中:Sub
Sub countdown()
 Dim time As Date: time = Now()
 Dim count As Integer: count = 10 'assuming 10 seconds

 time = DateAdd("s", count, time)

 Do Until time < Now()
    DoEvents
    ActivePresentation.SlideShowWindow.View.Slide.Shapes("countdown").TextFrame.TextRange = Format((time - Now()), "ss")
 Loop
End Sub

打开演示文稿,看看上面的解决方案是如何工作的。

请在测试后发送一些反馈。

评论

0赞 FaneDuru 11/6/2023
@Sander Van Beuningen:你没有抽出时间来测试上面的答案吗?如果经过测试,它没有达到您的需求吗?有什么不清楚的地方吗?