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

标签 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

有人知道问题的真正解决方案或更好的解决方法吗?虽然我没有找到它也许有一个可以移植到 PowerPoint 的 Word 或 Excel 的解决方案?

最佳答案

如果用这一行替换 ExecuteMso 行,整个过程仍然是一个撤消:

ActiveWindow.Selection.ShapeRange.TextEffect.FontBold = msoTrue

更新

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

Application.StartNewUndoEntry

关于vba - 在 PowerPoint 的宏中结束撤消事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8229969/

相关文章:

excel - 如何仅将包含数据的行从一个工作表复制到另一个工作簿中的另一个?

vba - 循环工作表时运行时错误 6 溢出

ms-office - 缺少 Microsoft Access 2013 开发人员选项卡

Office Javascript API (2013) - 返回值向上

audio - 是否可以使用Office Common API从外接程序插入视频?

vba - 将范围从 Excel 粘贴到 PowerPoint,同时保持格式设置

powerpoint - 在Powerpoint中仅制作一张不同大小的幻灯片

excel - 如何使用 vba 更新 powerpoint 2010 中嵌入的 Excel 链接

excel - 在 VBA 中使用 Substring 和 IndexOf 方法

excel - VBA - 保存工作簿并将今天的日期添加到当前工作簿名称