在PowerPoint中结束宏中的撤消事务

时间:2011-11-22 16:14:52

标签: vba ms-office powerpoint undo

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?

1 个答案:

答案 0 :(得分:4)

如果将ExecuteMso行替换为此行,则整个过程仍为一个撤消:

ActiveWindow.Selection.ShapeRange.TextEffect.FontBold = msoTrue

<强>更新

如果您使用的是PowerPoint 2010或更高版本,请在每个代码块之前放置此行,以便用户能够一次撤消一个步骤:

Application.StartNewUndoEntry