.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のサイトにあるように、
- [プロジェクト] メニューの [参照の追加] をクリックします。
- [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