次の方法で共有


Office Space: Word の最近使ったファイルを操作する

Office Space

Office Space へようこそ。Office Space は、Microsoft® Office アプリケーションのスクリプト作成に関するヒントとテクニックを紹介する新しいコラムです。過去のヒントについては、Office Space アーカイブを参照してください。Microsoft Office でのスクリプト作成について質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。

Word の最近使ったファイルを操作する

Scripting Guys と総称されていても、各人の個性はかなり異なります (中の 1 人は女性なので、Guy でもないのです)。似たものどうしというわけではないのです。

たとえば、ファイルの保存方法となると、各 Scripting Guy によって異なります。ほとんどの Scripting Guys は、ファイル管理に関しては、少なくともある程度まとまった意見を持っています。ところが、Scripting Guy の 1 人である Greg、いえ Gary は (彼を Gary と呼ぶことにします) ファイル管理を 1 つのデスクトップ フォルダのみで行うという考え方の持ち主で、Stuff と名付けたフォルダにすべてのファイルを詰め込んでいます。 ** ** 実に興味深いファイルとドキュメントの管理方法です。

皆さんが予想するとおり、Gary は Word の [最近使ったファイル] メニューに大いに頼りきっています。この機能がなければ、彼が Word 文書を探して再度開くことは不可能かもしれません。[最近使ったファイル] 機能とは、使用した Word 文書の最後の x 件です。これらはすべて [ファイル] メニューの下部に表示されます。 **

最近使ったファイル

なかなか便利ですね。しかし、Gary は最近使った Word 文書のパスを探すたびに Word を開かなければならないのでしょうか。もちろん、そんなことはありません。Gary が最近使ったファイルの一覧を取得するには、次のようなスクリプトを使用すればよいのです。

On Error Resume Next

Set objWord = CreateObject("Word.Application")
Set colFiles = objWord.RecentFiles

For Each objFile in colFiles
    Wscript.Echo objFile.Path & "\" & objFile.Name
Next

objWord.Quit

ご覧のとおり、単純なスクリプトです。Word.Application オブジェクトのインスタンスを生成し、RecentFiles コレクションを取得します。次に、単純な For Each ループでコレクションの各項目を参照し、最近使った各ファイルの Path プロパティと Name プロパティをエコーします。これで、Gary が Microsoft Word で使用した最後の 9 ファイルのパスが取得できました (Excel など、他の Office アプリケーションにも同様の機能があります)。

これで作業が 1 つ完了しました。コレクション内のファイルごとに固有の Path プロパティと Name プロパティがあります。Path はフォルダのパスを表し、Name は実際のファイル名を表します。したがって、C:\Scripts\Test.doc という文書のパスは C:\Scripts、ファイル名は Test.doc です。Path、\、および Name を連結して、次のような出力を取得します。

C:\Scripts\Test.doc
C:\Scripts\Office_Space.doc

これは一例です。

ユーザーが覚えていなくてもよいように、最近使ったファイルは使われた順序で表示されます。上記の単純な例では、最後に開かれた文書は Test.doc です。Test.doc の前に開かれた文書は Office_Space.doc です。

どうしてこれが重要なのかわかりますか。それは、スクリプトで文書を RecentFiles コレクションに追加することもできるため、使用された順序を知っておくと便利だからです。コレクションに文書を追加すると、コレクションの最後のファイルが一覧から削除され、新しい文書が一覧の先頭に追加されます。たとえば、スクリプトで C:\Scripts\New_document.doc という文書を RecentFiles コレクションに追加するとします。この処理を行ってから、最近使ったファイルの一覧を取得すると、コレクションは次のようになります。

C:\Scripts\New_document.doc
C:\Scripts\Test.doc

New_document.doc が一覧の先頭に表示され、Office_Space.doc が削除されます。コレクションにファイルを追加するたびに同じことが繰り返されます。

文書を RecentFiles コレクションに追加するスクリプトは、次のようになります。

On Error Resume Next

Set objWord = CreateObject("Word.Application")
Set colFiles = objWord.RecentFiles

colFiles.Add("C:\Scripts\New_document.doc")

objWord.Quit

これも簡単です。RecentFiles コレクションにバインドして Add メソッドを呼び出します。このとき、Add メソッドにパラメータとして一覧に追加する文書のパスを渡します。これで作業は完了です。

次に、コレクションから文書を削除する方法を説明します。 ** 最も簡単な方法は、コレクションをループして特定のパスと名前を持つファイルを検索することです。対象のファイルが見つかったら、Delete メソッドでコレクションからその文書を削除できます。次のスクリプトは、C:\Scripts\New_document.doc ファイルを検索して削除します。

On Error Resume Next

Set objWord = CreateObject("Word.Application")

Set colFiles = objWord.RecentFiles

For Each objFile in colFiles
    strPath = objFile.Path & "\" & objFile.Name
    If strPath = "C:\Scripts\New_document.doc" Then
        objFile.Delete
    End If
Next

objWord.Quit

ここが今回のポイントとなるところです。

strPath = objFile.Path & "\" & objFile.Name
If strPath = "C:\Scripts\New_document.doc" Then
    objFile.Delete
End If

コレクション内の各ファイルに対して、Path、\、および Name を連結して C:\Scripts\Test.doc のような文字列を作成します。次に、この文字列が対象のファイル C:\Scripts\New_document.doc と一致するかどうかをチェックします。一致していれば、この文書を RecentFiles コレクションから削除します (急いで付け加えると、ハード ディスクからは削除されません)。一致しなければ、ループに戻ってコレクションの次のファイルをチェックします。少々面倒な処理ですが、この例ではコレクション内の項目は最大でも 9 個であるため、ループ処理にたいした時間はかかりません。

最近使ったファイルが必ずしも有効とは限らないため、[ファイル] メニューに表示されるファイルの件数は 1 ~ 9 件の間で変動します。これらの設定の管理に役立つスクリプトについては、「図解 : Microsoft Office 管理」の該当ページを参照してください。Gary には何の役にも立たないかもしれませんが、 ** 見守っていくことにします。