如 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
有人知道问题的真正解决方案或更好的解决方法吗?虽然我没有找到它也许有一个可以移植到 PowerPoint 的 Word 或 Excel 的解决方案?
最佳答案
如果用这一行替换 ExecuteMso
行,整个过程仍然是一个撤消:
ActiveWindow.Selection.ShapeRange.TextEffect.FontBold = msoTrue
更新
如果您使用的是 PowerPoint 2010 或更高版本,请将此行放在您希望用户能够一次撤消一个步骤的每个代码块之前:
Application.StartNewUndoEntry
关于vba - 在 PowerPoint 的宏中结束撤消事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8229969/