VB.Net在已经运行的单词

时间:2017-04-06 12:22:08

标签: vb.net ms-word automation

我有一个小的VB.Net应用程序,它从模板打开一个新的word文档(例如打开Document1.docx)。它运行一些代码来找到替换一些文本。

然后,它允许用户编辑打开的文档。打开一个小型winform,并带有一个名为“Complete”的按钮。当用户点击它时,我希望它保存文档并进行进一步编辑等。

但是,我无法让代码在Word的运行实例中查看活动文档。

每当我引用activedocument时,它会抛出异常并说没有文档打开。

要保存活动文档的代码位于创建Word.Application对象的单独子目录中。 Word正在运行文档打开但仍然失败。

我已经尝试了以下内容以确保它获得了打开的单词实例; WordApp = Marshal.GetActiveObject(“Word.Application”)

但仍然没有看到任何公开文件。

有什么建议吗?

编辑#1 - 很抱歉不包含代码;

这是启动Word并执行一些基本查找/替换的代码。然后它启动form3,当用户编辑word文档时,form3保持不变。此代码通过单击表单2上的按钮运行;

    Dim oWord As Word.Application
    Dim oDoc As Word.Document
    Dim path As String

    path = "C:\Templates/"
    Try
        oWord = CreateObject("Word.Application")
        oWord.Visible = True
    Catch ex As Exception
      ''Some error handling code not included for the purpose of StackOverflow  
    End Try

    Try
        oDoc = oWord.Documents.Add(path & "MG11.dot")
    Catch ex As Exception
         ''Some error handling code not included for the purpose of StackOverflow  
    End Try


    With oWord.Selection.Find
        ''Find & Replace Code - this works so is not included for Stackoverflow
    End With

    Form3.Show()
    Me.WindowState = FormWindowState.Minimized
    Form1.WindowState = FormWindowState.Minimized '(form 1 has no code which effects Word)

     End Sub

表单3有一个按钮,按下时应保存word文档。它会根据其他地方的信息给它一个文件名。这里只显示基本代码 - 我只需要让vb.net立即查看活动文档。此代码在Button_1上运行Click for Form 3。

将WordApp应用于Word.Application   Dim oDoc As Word.Document = WordApp.ActiveDocument

    oDoc = WordApp.ActiveDocument

我也试过了;

    Dim WordApp As Word.Application
    WordApp = Marshal.GetActiveObject("Word.Application")
    Dim oDoc As Word.Document

    oDoc = WordApp.ActiveDocument

'一旦oDoc设置正确,我将使用SaveAs2来处理保存等

WordApp.ActiveDocument失败,声明没有打开的文档。

1 个答案:

答案 0 :(得分:1)

确保oWord在Form3中的范围内。它可能已经在范围内,或者您将一个Public Word.Applications属性添加到Form3并在显示表单之前设置该属性。

在第一种情况下,您在范围内的现有oWord对象上访问ActiveDocument,在第二种情况下,您在表单上设置属性并在显示之前访问该属性。

 oWord.ActiveDocument