2017-04-06 6 views
0

私はテンプレートから新しい単語文書を開く小さなVB.Netアプリケーションを持っています(例えばDocument1.docxとして開きます)。いくつかのテキストを置き換えるコードを実行します。VB.Netは既に実行中の単語のインスタンスでActiveDocumentを使用しています

これで、開いている文書を編集することができます。小さな「winform」には「Complete」というボタンがあります。ユーザーがこれをクリックすると、ドキュメントを保存してさらに編集するなどしたい。

しかし、Wordの実行中のインスタンスでアクティブなドキュメントを表示するコードを取得することはできません。

私はactivedocumentを参照するたびに、開いているドキュメントがないという例外と例外がスローされます。

アクティブなドキュメントを保存するコードは、Word.Applicationオブジェクトが作成されている場所とは別の場所にあります。 Wordは、ドキュメントを開いた状態で実行していますが、それでも失敗します。

私は、開いている単語のインスタンスを取得していることを確認するために以下を試しました。 WordApp = Marshal.GetActiveObject( "Word.Application")

開いているドキュメントはまだ表示されません。

提案がありますか?

EDIT#1 - コードを含めないと申し訳ありません。

これはWordを起動し、いくつかの基本的な検索/置換を行うコードです。その後、form3が開始され、ユーザーは文書documentを編集します。このコードは、フォーム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にはボタンが1つあり、これを押すとドキュメントが保存されます。他の場所の情報に基づいてファイル名を付けます。ここでは基本コードだけを示しています - 私はvb.netにアクティブなドキュメントを見るだけでいいです。このコードは、私も試してみたWord.Document = WordApp.ActiveDocument

oDoc = WordApp.ActiveDocument 

としてWord.Application 薄暗いoDocとしてフォーム3.

薄暗いWordAppクリックButton_1に走っています。 oDocが正しく設定されると

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

    oDoc = WordApp.ActiveDocument 

」私は何も開いているドキュメントが存在しない旨、それはWordApp.ActiveDocumentに失敗するなど

保存を処理するためにSaveAs2を使用します。

+2

は、私は人々が –

+0

友達との合意を助けることができるようにあなたが、質問に関連するすべてのコードを示し示唆、我々はすでにので、我々はそれに追加することができているコードを参照してくださいする必要があります。 –

+0

コードが追加されました。 –

答えて

1

oWordがForm3の有効範囲内にあることを確認してください。既にスコープ内にあるか、Public Word.ApplicationsプロパティをForm3に追加し、フォームを表示する前にそのプロパティを設定します。

最初のケースでは、スコープ内の既存のoWordオブジェクトのActiveDocumentにアクセスします。次に、フォーム上のプロパティを設定し、表示する前にアクセスします。

oWord.ActiveDocument 
+0

私の無知を許してください。しかし、あなたが何を意味するかを明確にすることはできますか?私はoWordがForm2によって開始され、Form3はそれにアクセスする必要があることを知っています。しかし、あなたの提案をどのようにして実装するのかはかなり分かりません。 –

+0

この場合、オプション2がおそらく最も簡単です。 Form3で変数を宣言します。Public oWord Word.ApplicationとしてForm3(Form3.oWord = oWord)を呼び出す前に設定します。これにより、Form3はoWordを取得し、Form2で作成したWord.Applicationオブジェクトと対話します。 –

+0

入手しました。あなたのソリューションは機能します。どうもありがとう –

関連する問題