.Net (VB2015)で、既に開いているWordファイルにアクセス

.Net (Visual Basic)の新しいバージョンから、Wordに新しいドキュメントを追加する方法が載っているWebサイトは多々あったのですが、既にWordでドキュメントを開いている場合に、そのドキュメントにどうやってアクセスするのかが意外にも分かりにくかったため、改めて記事にします。

『.NetでWordファイルにアクセス』と検索しても見つからなかったので、『.NetでWord.Applicationにアクセス』、というような検索をしたところ

Microsoft公式サイトの『Visual Basic .NET からオートメーションを使用して、Word で新しい文書を作成する方法』に、Word.Applicationにアクセスするサンプルコードがちゃんと載っていました。

サンプルコード内で、下記のような記述がありました。

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

   ・・・・・

'Start Word and open the document template.
oWord = CreateObject("Word.Application")
oWord.Visible = True
oDoc = oWord.Documents.Add

それなら、普段VBScriptで書いているやり方に倣って、


oWord = CreateObject("Word.Application")
oWord.Visible = True
oDoc = oWord.Documents.Add

を、

oWord = GetObject(, "Word.Application")
oDoc = oWord.ActiveDocument

に書き換えたら、既に開いているWordファイルにアクセスできるんじゃないかと。

で、サンプルコードのForm1にLabel1を追加して、

こんなフォームを準備。Button1をダブルクリックしてForm1.vbのコードを開いて、以下のようにコードを置き替え。

  • 既にWordのドキュメントが開かれている場合はファイル名をLabel1に表示。
  • 開かれていない場合は、Wordを開いて新しいドキュメントを追加。

を実現できました。

※Microsoftのサイトにあるように、

  1. [プロジェクト] メニューの [参照の追加] をクリックします。
  2. [COM] タブで Microsoft Word のオブジェクト ライブラリをクリックし、[選択] をクリックします。

の準備は必要です。

 Imports Word = Microsoft.Office.Interop.Word
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object,
      ByVal e As System.EventArgs) Handles Button1.Click

        Dim oWord As Word.Application
        Dim oDoc As Word.Document
        Dim YesNo As Integer

        On Error Resume Next
        '既に開いているWordアプリにアクセスしてみる。
        oWord = GetObject(, "Word.Application")
        oDoc = oWord.ActiveDocument
        Label1.Text = oDoc.Name

        If Err.Number <> 0 Then
            oWord = Nothing
            oDoc = Nothing
            'Wordが開いていない場合、新しくWordを立ち上げて新規のドキュメントを開く
            YesNo = MsgBox("現在Wordは開かれていません。新らしいドキュメントを開きますか?", vbYesNo)
            If YesNo = vbYes Then
                'Start Word and open the document template.
                oWord = CreateObject("Word.Application")
                oWord.Visible = True
                oDoc = oWord.Documents.Add
                Label1.Text = oDoc.Name
            End If
        End If

        'All done. Close this form.
        'Me.Close()

    End Sub
End Class

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA