Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 在幻灯片放映期间执行的宏操作_Vba_Events_Powerpoint_Slideshow_Undo - Fatal编程技术网

Vba 在幻灯片放映期间执行的宏操作

Vba 在幻灯片放映期间执行的宏操作,vba,events,powerpoint,slideshow,undo,Vba,Events,Powerpoint,Slideshow,Undo,我想问一些事情,可能会变得很复杂。我正在制作一个带有一些游戏元素(使用变量、计时器、分数等的东西)的交互式演示文稿,我注意到,当您运行幻灯片放映时,宏所做的任何更改(更改文本框中的字符串,禁用某些形状)都会在幻灯片放映结束后保留。鉴于演示文稿和其中的游戏需要多次播放,我希望避免用户点击“撤消”一百万次或再次关闭和打开演示文稿。我不知道该怎么做,但我有一些想法: 第一种方法是在游戏运行时跟踪所做的每一次更改,然后让宏在幻灯片放映停止后按要求次数使用“撤消”命令。然而,事实证明,创建事件处理程序相当

我想问一些事情,可能会变得很复杂。我正在制作一个带有一些游戏元素(使用变量、计时器、分数等的东西)的交互式演示文稿,我注意到,当您运行幻灯片放映时,宏所做的任何更改(更改文本框中的字符串,禁用某些形状)都会在幻灯片放映结束后保留。鉴于演示文稿和其中的游戏需要多次播放,我希望避免用户点击“撤消”一百万次或再次关闭和打开演示文稿。我不知道该怎么做,但我有一些想法:

第一种方法是在游戏运行时跟踪所做的每一次更改,然后让宏在幻灯片放映停止后按要求次数使用“撤消”命令。然而,事实证明,创建事件处理程序相当复杂。我不太熟悉VBA,也不太了解需要做多少声明、类和其他事情,事实上,我在参考资料中找不到简单结束幻灯片放映的事件是什么(也就是说,当用户按下Esc键时,而不是在到达最后一张幻灯片时)更不用说,很容易犯一个错误,使所有代码都变得无用,这让我认为,仅仅对于一个事件来说,这是不必要的复杂

另一个想法是在游戏开始时设置要在游戏中更改的属性的初始值,以及所需的变量,以便无论在演示文稿中进行了什么更改,在运行时都会重置这些值,尽管这会使调整内容和在需要时对游戏进行重大更改变得单调乏味

你能就我该如何处理这个问题给我一些建议吗?哪种方法更好?是否有办法使宏在幻灯片放映期间不会对演示文稿本身进行任何实际更改?我很想听听你的想法


谢谢

在开始之前保存,然后恢复怎么样?嗯,在开始之前创建一个副本,显示它,然后删除,然后返回到原始演示文稿?这些都是有趣的建议,尽管我担心它们需要事件处理程序才能退出幻灯片放映。有没有一个简单的方法来创建它?有人能解释一下这个声明是如何运作的吗?为什么我需要一个单独的类模块以及所有这些?要捕获事件,您需要WithEvents关键字,它仅在类模块中有效。无法自动设置事件处理程序。相反,您需要使用Auto_Open宏。自动打开宏只能在外接程序中工作。这只是您第一次这样做的时候,类模块和外接程序可能非常简单。下面是一些关于PowerPoint事件编程的更多信息的页面:我能想到的最简单的方法是让您运行的任何代码在例程结束时包含ActivePresentation.Saved=True,然后使用您自己的退出按钮再次设置Saved=True并关闭演示文稿。如果Saved=True,则不会提示用户保存演示文稿,因此将讨论在幻灯片放映期间所做的任何更改。