如何从幻灯片模式更新幻灯片母版并使用VBA刷新当前幻灯片?

时间:2017-05-02 13:24:58

标签: vba powerpoint-vba

我试图在powerpoint演示文稿的所有幻灯片中都有一个计数器。 计数器需要通过所有幻灯片中的按钮来控制,以增加它。

我可以为一张特定的幻灯片执行此操作,但是当我使用幻灯片母版时,它不会在幻灯片模式下刷新屏幕。我必须退出幻灯片并再次输入以查看更改。

在幻灯片模式下无法刷新的代码:

ctr = ctr + 1
ActivePresentation.Designs(1).SlideMaster.Shapes("Counter").TextFrame2.TextRange.Text = ctr

有效的代码(但仅适用于一张幻灯片,而不适用于演示文稿中的所有幻灯片):

ctr = ctr + 1
ActivePresentation.Slides(1).Shapes("Counter").TextFrame2.TextRange.Text = ctr

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您的第二种方法有效,为什么不循环呢?

Dim sld as Slide

ctr = ctr + 1
For Each sld in ActivePresentation.Slides
    sld.Shapes("Counter").TextFrame2.TextRange.Text = ctr
Next

注意:在任何不包含名为&#34; Counter&#34;的形状的幻灯片上都会出现错误,如果您的演示文稿中存在,则需要添加逻辑来处理该条件。< / p>

将此链接添加为书签,它是PPT对象模型参考,虽然难以仔细阅读,但它可以解释您需要的任何内容。

https://msdn.microsoft.com/en-us/library/office/ff743835(v=office.14).aspx

最困难的部分(作为初学者)知道要问什么问题,虽然对象模型没有立即帮助你,但是你浏览和搜索它的次数越多,你会越熟悉你可以使用的不同物品,以及你可以对它们做些什么。

如果您完全是VBA的新用户,也请将此VBA语句列表添加为书签。这有例子和所有控制流程的定义&amp;您可能会将一些代码放在一起使用的逻辑语句。

https://msdn.microsoft.com/en-us/library/office/jj692812(v=office.15).aspx

这个答案讨论了如何在更改幻灯片时自动运行宏,我们会针对您的问题使用该方法。您将使用OnSlideShowPageChange事件,因为它是自动宏,并且不需要更复杂的Application Class事件处理程序。

How to run a macro "OnEnterSlide" or "OnLeaveSlide" in Powerpoint VBA?

实现这个实际上是一个中等复杂的问题,对于不熟悉VBA或PowerPoint对象模型的人来说也是如此。

现在,您已经提到了许多事情,这些事情要么根本不是真的,要么至少不直观或明显为什么这些必须是真实的,当提出替代方案时:

  

为了实现这一点,我必须使用宏来单独为每个幻灯片添加形状。但是如果我想改变形状的大小,我也必须使用代码。不是很优雅...宁愿以某种方式强制刷新并使用主幻灯片形状

(请注意,您的初始问题的范围不断增加并变得更加复杂)。

  

原因是在不使用代码和在所有幻灯片中创建形状的情况下更容易更改形状。

有时这是最简单或最好的做事方式,有时却不是。我无法根据您的具体要求对此进行评估,因为您只提供了两行代码进行检查,但从我的观点来看,您似乎对编写更多代码犹豫不决,因为您只需要#&# 39;不知道如何。

对不起,但是你的截止日期不是我的问题,而且我已经花了很多时间在这个答案上,我希望至少能指出你正确的方向。

答案 1 :(得分:0)

这是一种不同的方法,您可以考虑。 在幻灯片2中添加名为Sh1,Sh2的按钮,在幻灯片3中添加Sh3等。 并将所有这些形状附加到下面的代码

For ctr = 1 To 3
If ActivePresentation.Slides(ctr).Shapes("sh" & ctr).TextFrame2.TextRange.Text = ctr Then
ActivePresentation.SlideShowWindow.View.Next
End If
Exit Sub
Next
End Sub

这将检查当前幻灯片与计数器,如果匹配,移动其他其他退出。