VB.Net在已经运行的单词实例中使用ActiveDocument

问题描述:

我有一个小型的VB.Net应用程序,它从模板中打开一个新的Word文档(例如打开为Document1.docx)。它运行一些代码来查找替换一些文本。VB.Net在已经运行的单词实例中使用ActiveDocument

然后允许用户编辑打开的文档。有一个小型winform打开一个名为“完成”的按钮。当用户点击这个时,我想要它保存文档并做一些进一步的编辑等。

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

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

正在寻找保存活动文档的代码与创建Word.Application对象的位置不同。 Word在文档打开的情况下运行,但仍然失败。

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

但是仍然没有看到任何打开的文件。

有什么建议吗?

编辑#1 - 遗憾的是不包括代码;

这是启动Word并执行一些基本查找/替换的代码。然后它启动form3,在用户编辑word文档时保持原样。此代码从窗体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点击表格3.

昏暗WordApp作为Word.Application 昏暗沃达柯作为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 

“一旦沃达柯设置正确,我将使用SaveAs2办理储蓄等

它未能在WordApp.ActiveDocument,说明有没有打开的文档。

+2

我建议你展示有关问题的所有代码,使人们可以帮助同意与朋友 –

+0

,我们需要看到的是你已经因此我们可以添加到它的代码。 –

+0

代码根据要求添加了一些解释。 –

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

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

oWord.ActiveDocument 
+0

请原谅我的无知,但你能澄清你的意思吗?我得到这个oWord是由Form2启动的,并且Form3需要访问它。但不确定如何实施您的建议。 –

+0

在这种情况下,选项2可能是最简单的方法。在Form3公共oWord上声明变量随着Word.Application在调用Form3(Form3.oWord = oWord)之前设置它。通过这样做Form3获取范围内的oWord并与您在Form2上创建的Word.Application对象进行交互。 –

+0

明白了 - 您的解决方案有效。非常感谢 –