Quantcast
Channel: いつも隣にITのお仕事
Viewing all articles
Browse latest Browse all 2077

Word VBAによるドキュメント一括処理の第一歩!文書ファイルを開く方法と閉じる方法

$
0
0
open-close

photo credit: Theen … Close Open via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Word文書ですが、複数のドキュメントファイルに一気に同じ処理を加えたいときありますよね。

例えば以下のようなニーズがあります。

  • 文書全体のフォント種類を変更したい
  • 全角スペースを取り除きたい
  • 特定の文字列を別の文字列に置換したい
  • 文書のページ数や文字数を調べたい

このような要望が出てきたときは、VBAの出番ですよね。

ドキュメントファイルがどんなにたくさんあったとしても、マクロさえ仕込んでおけば、あとはPCが自動で勝手に、そして正確に処理をしてくれます。

ということで、今回から何回かにわけて複数のWordドキュメントについて一括で処理をするWordマクロの作り方についてお伝えしますね。

今回は一回目ということで、ドキュメント一括処理の基本中の基本、最初の一歩です。Word VBAでドキュメントファイルを開く方法、そして閉じる方法についてお伝えします。

では、行ってみましょう!

OpenメソッドでWordドキュメントを開く

Word VBAでドキュメントを開く場合は、Documentsコレクションに対するOpenメソッドを使います。

Documents.Open ファイル名

Documentオブジェクトではなくて、Documentsコレクションが対象ということに注意くださいね。コレクションに開いたドキュメントを追加するイメージです。

また、ファイル名はパスを指定しないと「既定のローカルフォルダの保存場所」(「ファイル」→「オプション」→「保存」で確認できます)に存在するファイルを開きます。

ですが、多くの場合は別のフォルダであることが多いと思いますのでフルパスを指定します。

以下画像のようにフォルダ「C:\Users\ntaka\Dropbox\desktop\word-document」内の「原稿(1章).docx」を開きたいとします。

Word VBAで開きたいフォルダ

その場合は、以下のようなプロシージャを実行すれば、開くことができます。

Sub openDoc()

Documents.Open "C:\Users\ntaka\Dropbox\desktop\word-document\原稿(1章).docx"

End Sub

こちら実行をしますと、以下のように「原稿(1章).docx」が開きます。

Word VBAで開いたドキュメント

なつかしい原稿が開きました。

Pathプロパティでドキュメントのパスを取得する

ファイル名フルパスの指定、長すぎてちょっと面倒ですね。

今回の場合は、Pathプロパティを活用するのがおすすめです。

Documentオブジェクト.Path

これで、指定したDocumentオブジェクトが格納されているフォルダパスを取得できます。

マクロを記述しているドキュメントはThisDocumentと表すことができますから、上記のプロシージャは

Sub openDoc()

Documents.Open ThisDocument.Path & "\原稿(1章).docx"

End Sub

と書き直すことができます。

開いたドキュメントを取り扱う方法

ただ、これでは開いただけで何の操作もできません。

ほとんどの場合は開いた後に、そのドキュメントに何かしらかの操作をしたいわけですから、その方法を知る必要がありますよね。

開いたドキュメントをオブジェクト変数にセットする

一つの方法としては、開いたドキュメントをオブジェクト変数にセットする方法です。

このように書きますね。

Set 変数 = Documents.Open(ファイル名)

Openメソッドは戻り値で開いたDocumentオブジェクトを返しますから、それをすぐさまオブジェクト変数にセットしてしまうのです。

ところで、今回は引数の指定が括弧内になっていますね。戻り値がある場合は、引数の指定は括弧内になりますからね。覚えておくと良いです。

例えば、このようなプロシージャですね。

Sub openDoc()

Dim doc As Document
Set doc = Documents.Open(ThisDocument.Path & "\原稿(1章).docx")

Debug.Print doc.Name

End Sub

実行しますと、指定したドキュメントが先ほどと同様開くとともに、イミディエイトウィンドウにファイル名が出力されます。

DocumentオブジェクトのNameプロパティは、ドキュメントのファイル名を表します。

Documentオブジェクト.Name

開くドキュメントとWithステートメント

別の方法として、Openメソッドで開いたドキュメントをWithステートメントでくくるという方法があります。

With Documents.Open(ファイル名)
 ’処理
End With

こちらも引数の指定がカッコつきになりますので、ご注意くださいね。

プロシージャとしては以下のようなパターンです。

Sub openDoc()

With Documents.Open(ThisDocument.Path & "\原稿(1章).docx")

    Debug.Print .Name

End With

End Sub

これでWithブロック内は開いたオブジェクトを対象として処理を書くことができます。

オブジェクト変数を使わなくていいのなら、こちらのほうが行数が少なくて済みそうですね。

Closeメソッドでドキュメントを閉じる

開いているドキュメントを閉じる場合はCloseメソッドを使います。

Documentオブジェクト.Close

OpenメソッドはDocumentsコレクションが対象でしたが、CloseメソッドはDocumentオブジェクトが対象になります。

例えば、開いたドキュメントをオブジェクト変数にセットした場合は以下のようなプロシージャになります。

Sub openDoc()

Dim doc As Document
Set doc = Documents.Open("C:\Users\ntaka\Dropbox\desktop\word-document\原稿(1章).docx")

Debug.Print doc.Name

doc.Close

End Sub

Withステートメントを使ったパターンのほうは

Sub openDoc()

With Documents.Open(ThisDocument.Path & "\原稿(1章).docx")

    Debug.Print .Name
    .Close

End With

End Sub

とすればOKです。

まとめ

Word VBAでドキュメントを開く方法と閉じる方法についてお伝えしました。

  • DocumentsコレクションのOpenメソッドでドキュメントファイルを開く
  • 開いたドキュメントをオブジェクト変数にセットする
  • 開いたドキュメントをWithステートメント内で使用する
  • DocumentオブジェクトのPathプロパティでドキュメントのフォルダパスを取得する
  • CloseメソッドでDocumentオブジェクトを閉じる

といったテクニックをお伝えしました。

いずれも、Word VBAで複数ドキュメントを一括処理するときには必須となりますのでバッチリ押さえておいてくださいね。

次回は、FileSystemオブジェクトとFor Each文を使ってフォルダ内の全てのドキュメントについて操作をする方法です。

どうぞお楽しみに!


Viewing all articles
Browse latest Browse all 2077

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>