2
如http://support.microsoft.com/kb/278591中所述PowerPoint通常會將宏或插件所做的所有更改合併到單個撤消步驟中。因此,如果將以下代碼放入VBA中,並按F5執行兩次,那麼 將只是一個撤消步驟。在PowerPoint中宏結束撤銷事務
Sub Move()
If ActiveWindow.Selection.Type = ppSelectionShapes Then
ActiveWindow.Selection.ShapeRange.IncrementLeft 10
End If
End Sub
我正在尋找一種方式,更復雜的場景,用戶可以進行多種變化,而不直接訪問PowerPoint中更改此行爲。理想情況下,應該可以從用戶的角度撤消對應於一個更改的一組修改。
我發現ExecuteMso似乎打破了撤銷事務。所以如果你執行下面的代碼兩次,它會導致4個撤銷步驟(第一個增量,ExecuteMso,第二個增量,ExecuteMso)。
Sub Move()
If ActiveWindow.Selection.Type = ppSelectionShapes Then
ActiveWindow.Selection.ShapeRange.IncrementLeft 10
Application.CommandBars.ExecuteMso "Bold"
End If
End Sub
任何人都知道問題的真正解決方案或更好的解決方法?雖然我沒有找到它可能有Word或Excel的移植到PowerPoint的解決方案?
我想我沒有把它完全清楚原帖:我要**程序的每個執行**對應**一個撤消步驟**。你的建議會導致多次執行的單一步驟。 ExecuteMso解決方法是最接近我期望的行爲,這就是爲什麼我提到它。 –
希望你使用的是PowerPoint 2010,因爲有一個新的命令應該這樣做:''Application.StartNewUndoEntry''。把它放在你想撤銷的每一行代碼之前。 –
太棒了,這正是我一直在尋找的!通常我們使用PowerPoint 2010,因此我將使用您推薦的功能。爲了安全起見,我將包括PowerPoint 2007的ExecuteMso解決方法,除非您有其他建議。 –