在 VBA 中读取撤消历史记录

发布于 2024-07-21 02:20:26 字数 560 浏览 6 评论 0原文

我在 Word 2003 中有一个相当简单的 VBA,可以将文档的字体更改为“eco 字体”(长话短说),并打开“打印”对话框。

当用户点击“取消”或“确定”时,代码会执行“撤消”操作以恢复更改。

问题是,有时当我按“确定”打印文档时,需要撤消两个操作(“字体更改”和“更新字段”)。 我似乎无法预测这什么时候会发生。

有什么方法可以读取Word撤消缓冲区中的最后一项吗? 这样我就可以一直按撤消键,直到字体更改完成。

编辑: 最终代码(删减):

ActiveDocument.Range.Bookmarks.Add ("_tempEcoUndoStart_") 
ActiveDocument.Content.Font.Name = "Nanonymus Eco Sans" 
Dialogs(wdDialogFilePrint).Show 
While ActiveDocument.Bookmarks.Exists("_tempEcoUndoStart_") 
    ActiveDocument.Undo 
Wend

I have a fairly simple bit of VBA in Word 2003 that changes the document's font to an 'eco font' (long story), and brings up the Print dialog.

When a user hits Cancel or OK, the code does an 'undo' to revert the change.

The problem is, sometimes when I press "OK" to print the document, two actions need to be undone ('font change', and 'update fields'). I can't seem to predict when this will happen.

Is there any way of reading the last item in Word's undo buffer? That way I can just keep pressing undo until the font change has been completed.

Edit:
Final code (cut down):

ActiveDocument.Range.Bookmarks.Add ("_tempEcoUndoStart_") 
ActiveDocument.Content.Font.Name = "Nanonymus Eco Sans" 
Dialogs(wdDialogFilePrint).Show 
While ActiveDocument.Bookmarks.Exists("_tempEcoUndoStart_") 
    ActiveDocument.Undo 
Wend

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

过潦 2024-07-28 02:20:26

您可以使用一个技巧在 Word 中进行类似“事务”的撤消操作:在宏的开头在整个文档上放置一个特殊的书签。 完成宏后,您应该再次删除此书签。 现在,当调用“撤消”命令时,当文档中存在您的特殊书签时重复撤消操作。

以下相关问题有详细信息:

我可以创建一个在 Word 或 Excel 中撤消交易? (VSTO)

You can use a trick to have a 'transactional'-like undo in Word: At the beginning of the macro place a special bookmark on your entire document. You should remove this bookmark again when you are done with your macro. Now, when calling the Undo command, repeat the undo while there is your special bookmark in the document.

The following related question has the details:

Can I create an undo transaction in Word or Excel? (VSTO)

长安忆 2024-07-28 02:20:26

我没有测试过,但也许您可以在操作之前使用 UndoClear,并在操作之后使用撤消计数?

ActiveDocument.UndoClear
ActiveDocument.Undo 2

I have not tested, but perhaps you can use UndoClear before your actions, and a count on undo after?

ActiveDocument.UndoClear
ActiveDocument.Undo 2
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文