首页 文章

VB.Net在已运行的word实例中使用ActiveDocument

提问于
浏览
0

我有一个小的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 .

Dim WordApp As 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 回答

  • 1

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

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

    oWord.ActiveDocument
    

相关问题