首先,我确实看了,但没有发现任何东西。
我希望在发生以下情况之一时运行宏:
- 文档已打开
- 文档已保存
- 文本粘贴到文档中
- 该文件又增加了一页。
- 文档缩小到少了一页。
前两个有事件,即使从技术上讲第二个是在保存之前,但其他三个有事件吗?如果没有,我可以以某种方式添加它们吗?
关于第二个事件,自动保存时是否也有一个 DocumentBeforeSave 事件?
答案1
你谈论的是捕获/拦截命令。你说得对,有open
和的事件save
,但其他的事件不太常见。以下是一些代码的链接接膏。我知道它专注于 Excel,但它可以帮助您朝着正确的方向前进。
另外,请查看使用 VBA 控制 2007 Office System 中的内置命令。本文中有链接至面向 Office 开发人员的 SDK 文档和参考这也可能有帮助。
请记住,除非宏安全设置相同,否则在已保存的文档上运行宏对每个人的效果可能不同。有些计算机可能会阻止它们,这意味着您的文档将无法按您的意愿运行。
答案2
我相信您可以通过将子函数命名为与内置方法名称相同的名称来覆盖某些 VBA 函数。在这种情况下,这应该有助于捕获事件。
Sub EditPaste()
Selection.Paste
'Other code
End Sub
关于捕获文档中的页数,您可以使用计时器来轮询页数,并在计数发生变化时采取行动:
Private Sub Document_Open()
Application.OnTime When:=Now + TimeValue("00:00:01"), _
Name:="CheckPages"
End Sub
Sub CheckPages()
'
' Get pages using ActiveDocument.ActiveWindow.ActivePane.Pages.Count
' Compare with page count stored via global variable
' If they don't match run code for your event.
'Rerun the macro in 1 second
Application.OnTime When:=Now + TimeValue("00:00:01"), _
Name:="CheckPages"
End Sub