我有一段处理PowerPoint文件中多个幻灯片的VBA代码。 代码的一部分会暂时调整幻灯片的大小,以便能够按不同的宽高比导出图像。
我不能将它们重新调整为原来的大小,因为PowerPoint永远无法将其内容恢复到调整前的完全状态,所以我执行了
Application.StartNewUndoEntry
我进行调整大小之前,然后......
Application.CommandBars.ExecuteMso "Undo"
在我导出之后,可以撤销调整大小并确保所有内容恢复到调整大小之前的状态。
然后,我会写一些元数据到幻灯片注释页,并为下一张幻灯片重复这个过程。
问题在于:
Application.CommandBars.ExecuteMso "Undo"
未阻塞直到撤销完成。这意味着在笔记页上的写入(在
Application.CommandBars.ExecuteMso "Undo"
之后)也被撤消了!我该如何让PowerPoint等待它完成
Application.CommandBars.ExecuteMso "Undo"之后再执行写入笔记页的代码?
我尝试在撤消和其他代码之间等待并休眠,甚至长达几秒钟,但似乎这根本不起作用。它仍然会撤消调用executeMso "Undo"之后执行的代码
(我还考虑过存储我需要更新笔记页的幻灯片的ID,直到所有调整大小和导出都完成,然后去更新所有笔记页,但我怀疑这将是浪费时间,因为最后一个撤销没有完成其工作之前,第一个(或多个)仍将丢失。)
(我还尝试将笔记更新代码移到调整幻灯片大小(然后撤销)之前 - 但这行不通,因为它只是将问题移动到上一个幻灯片撤销未完成,而不是当前的问题。)
Application.StartNewUndoEntry
。这样应该会强制解决它,然后继续而不影响其他步骤。否则,PowerPoint 将把单个宏所做的所有更改视为一个撤销步骤。 - Mike