如http://support.microsoft.com/kb/278591中所述,PowerPoint通常会将宏或加载项所做的所有更改组合到单个撤消步骤中。因此,如果您将以下代码放入VBA并按F5执行两次 只会撤消一步。
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?
答案 0 :(得分:4)
如果将ExecuteMso
行替换为此行,则整个过程仍为一个撤消:
ActiveWindow.Selection.ShapeRange.TextEffect.FontBold = msoTrue
<强>更新强>
如果您使用的是PowerPoint 2010或更高版本,请在每个代码块之前放置此行,以便用户能够一次撤消一个步骤:
Application.StartNewUndoEntry