0

我一直在尝试创建一个程序来处理使用 VB.net 在 Microsoft Word 中触发的事件。我的最终目标是使用这个程序来响应用户关闭的 Word,但是当我尝试使用它们时DocumentBeforeCloseDocumentBeforeSave它们似乎没有触发,但我有一个事件要处理NewDocument,并且它应该像它一样工作。

这是我的代码:

Imports Microsoft.Office.Interop

Public Class Form1

Private WithEvents oWord As Word.ApplicationClass
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    'Create a new instance of Word, make it visible, and activate it.
    oWord = CreateObject("Word.Application")
    oWord.Visible = True
    oWord.Activate()

    'Create a new document.
    oWord.Documents.Add()

    'Release the instance of Word and leave it running.
    oWord = Nothing

End Sub

Private Sub oWord_ApplicationEvents2_Event_DocumentBeforeClose(Doc As Word.Document, ByRef Cancel As Boolean) Handles oWord.ApplicationEvents2_Event_DocumentBeforeClose
    System.Windows.Forms.MessageBox.Show("The document is closing.")
End Sub


Private Sub oWord_ApplicationEvents2_Event_DocumentBeforeSave(Doc As Word.Document, ByRef SaveAsUI As Boolean, ByRef Cancel As Boolean) Handles oWord.ApplicationEvents2_Event_DocumentBeforeSave
    System.Windows.Forms.MessageBox.Show("The document is saving.")
End Sub
'Handler for the Microsoft Word NewDocument event.
'The NewDocument event is fired when a new document is created.

Private Sub oWord_ApplicationEvents2_Event_NewDocument(Doc As Word.Document) Handles oWord.ApplicationEvents2_Event_NewDocument
    'Add some text to the new document.
    With oWord.Selection
        .TypeText("The ")
        With .Font
            .Bold = Word.WdConstants.wdToggle
            .Italic = Word.WdConstants.wdToggle
        End With
        .TypeText("NewDocument ")
        With .Font
            .Bold = Word.WdConstants.wdToggle
            .Italic = Word.WdConstants.wdToggle
        End With
        .TypeText("event handler inserted this text.")
    End With
End Sub
End Class

我参考了 Microsoft Office Interop 和 Microsoft Word 对象库。

我在 .ApplicationEvents2_Event_DocumentBeforeClose Event 上找到了文档,该文档指出它不打算从代码中使用,但提供了一种声明和使用它的方法,所以我不确定我是使用错误的语法还是一起使用错误的方式。

4

1 回答 1

1

VB.NET

您可以通过计时器计算 Word 进程。这只会在计时器比用户打开和关闭另一个文档时更快。

Private m_wordProcessCount As Integer = 0
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Dim processCount As Integer = Process.GetProcessesByName("WinWord").Count()
    If Not processCount < m_wordProcessCount Then
        'a word process has been closed..
        doSomething()
        'update our wordcount
        m_wordProcessCount = processCount
    End If
End Sub

字宏

您可以在 Word 的关闭事件上使用 VBA ..

Private Sub Document_Close()   
  Dim strPath As String
  strPath = Dir("C:\Program Files (x86)\SomeProgram\Program.exe")
  'run the external exe
  Shell strPath
End Sub

http://msdn.microsoft.com/en-us/library/office/aa211664(v=office.11​​).aspx

于 2013-11-14T20:32:44.470 回答