開いているドキュメントファイルの名前を取得する|CATIAマクロの作成方法
今回の記事はマクロ案募集でいただいた内容です。
送って頂いた内容は以下のようなマクロです。
実行中のファイル名を取得する
VBAマクロで現在開いているドキュメントファイルの名前を取得する方法はいくつかあります。
今回はその代表的な方法と、それぞれの違いについて解説していきます。
※マクロ案は「目次」で随時募集中なのでぜひご利用下さい。
(「お問い合わせ」もしくはTwitterのDMでも可)
ドキュメントの名称を取得
ドキュメントの名称を取得するには大きく分け以下の2つの方法があります。
Documentオブジェクト + Nameプロパティ
Windowオブジェクト + Captionプロパティ
上記のどちらの方法でも取得できるので好きな方を使いましょう。
Documentオブジェクト+Nameプロパティで取得することのできる文字列(ファイル名)は、ドキュメント自身の名前です。イメージとしては「保存管理」時に表示される文字列を取得している感じです。
対してWindowオブジェクト+Captionプロパティで取得することのできる文字列(ファイル名)は、ドキュメント自身ではなくドキュメントウィンドウの名前です。
イメージとしてはドキュメントウィンドウの左上に表示されている文字列、もしくはメニューバーの[ウィンドウ]タブに表示されている文字列を取得している感じです。
基本的には「ドキュメント名=ウィンドウ名」となっているため、どちらで取得しても結果は同じになります。ただ取得している場所は違うということは理解しておきましょう。
サンプルコード
それぞれの方法でアクティブドキュメントのファイル名を取得するには以下のように書きます。
以下のどちらのコードを使用してもファイル名を取得することができます。
1 2 3 4 5 6 7 8 9 10 11 |
Sub CATMain() Dim DOC As Document Set DOC = CATIA.ActiveDocument Dim DOCName As String DOCName = DOC.Name MsgBox DOCName End Sub |
1 2 3 4 5 6 7 8 9 10 11 |
Sub CATMain() Dim WIN As Window Set WIN = CATIA.ActiveWindow Dim DOCName As String DOCName = WIN.Caption MsgBox DOCName End Sub |
DocumentオブジェクトとWindowオブジェクトの違い
Documentオブジェクト+Nameプロパティの方が良さそう!
と思ってしまうのが普通ですが、実はWindowオブジェクト+Captionプロパティで取得したほうがいい場面もあります。
たとえば先ほどはアクティブドキュメントの取得をしましたが、それぞれ以下のように書くことで指定したドキュメントの名称を取得することができます。
Dim DOC As Document
Set DOC = CATIA.Documents.Item(2)
Dim DOCName As String
DOCName = DOC.Name
Dim WIN As Document
Set WIN = CATIA.Windows.Item(2)
Dim DOCName As String
DOCName = WIN.Name
それぞれ「Documentsコレクション」「Windowsコレクション」の「Itemメソッド」を使って、コレクション内にある2番目のドキュメントとウィンドウを指定しています。アクティブドキュメントではなく、このドキュメントを指定して名前を取得するという場合には、取得の結果が変わってしまう場合があるので注意が必要になってきます。
たとえば現在開いているドキュメントが以下のようにCATPartだけであれば、どちらのコードを使っても同じ結果を取得することができます。
(この場合で上記のコード実行するとどちらも「Part2.CATPart」を取得することが出来ます)
しかし以下のようにCATProductが入ってしまうと結果は変わってしまいます。
(この場合で上記のコード実行するとDocumetオブジェクトのコードでは「PartA.CATPart」を、Windowオブジェクトのコードでは「Part2.CATPart」を取得することが出来ます)
これは開かれているドキュメント数とウィンドウ数がアンマッチなために起こってしまう現象です。
上の画像の場合はDocumentは5つ開かれている(Product1,PartA,PartB,Part2,Part3)のに対し、Windowは3つしか開かれていません(Product1,Part2,Part3)。
取得した結果も変わってきちゃったわけですね
このように開いているドキュメントの状況によって取得できるものは変わってきます。
ただCATProductやCATDrawingで紐づいているドキュメントは認識しづらいこともあり、ユーザー的には現在開いているドキュメントはウィンドウの数と認識してしまう場合が多いです。
そのため直感的には「Windowオブジェクト+Captionプロパティ」で取得したほうが理解はしやすいと思います。(メニューバーの[ウィンドウ]タブを開くとItemメソッドに使える番号も割り振られているのも便利)
まとめ
今回は開かれているドキュメントの名称を取得する方法についての解説でした。
「Document+Nameプロパティ」「Windowオブジェクト+Captionプロパティ」それぞれの方法で何を取得しているのかさえ押さえておけば、今後それぞれを使い分けてマクロを作成することもできるようになっていきます。
またオススメはできませんが「Windowオブジェクト+Nameプロパティ」でもファイル名(実際はウィンドウ名ですが)を取得することはできます。ただ、ドキュメントの保存状態によっては意図したものでないファイル名が取得される場合があるので基本はCaptionプロパティの方を使うようにしましょう。
今回の内容が少し難しいという場合は以下のページも読むことをオススメします。
「Documentオブジェクト 」「Windowオブジェクト」
「Documentsコレクション」「Windowsコレクション」
マクロ自体あまり簡単といえるものではないのでいろいろ試して徐々に理解していきましょう。
CATIAマクロを本気で勉強するなら