Macで作成ファイルのファイル名文字でハマる。

ExcelVBA(マクロ)を使ってやりたいことが,Macで作成されたファイルの,ファイル名文字という思わぬことが原因で頓挫することを経験したり,その他にもいくつか新しいことを知ることができたので,備忘録的に書きます。

やりたいことは,Word・ExcelPowerPointで作られた複数ファイルの「作成日」や「最終更新日」,「最終更新者」などいくつかのプロパティを一覧でExcelファイルかCSVファイルとして取得することでした。

ちょっと探したら,複数ファイルのプロパティをCSVで一覧出力するフリーソフトは見つかりました。
ファイルのプロパティ取得ツール - 複数ファイルのプロパティ情報をまとめて取得
でも自分がやりたかったこととはちょっと違う。
何が違うか。少しぐぐったら,ファイルのプロパティとは別に,Word等Officeソフトで作られたファイル特有の「ドキュメントプロパティ」というものがあることを知りました。
このフリーソフトでは前者を出力するもので,後者ではないことが分かり,では「ドキュメントプロパティ」なるものをどうやって取得するのか?
そのドキュメントプロパティを書き換えたり消去したりするフリーソフトは結構ありそうでしたが,複数ファイルの任意のドキュメントプロパティを一覧出力するフリーソフトはちょっと見つかりそうになかったので,Excelマクロでそんなことができないか,あれこれぐぐってみました。
officetanaka.net
このページはドキュメントプロパティには「Excelがあらかじめ定義している「組み込みのドキュメントプロパティ」と、任意の名前やデータを記録できる「ユーザー設定のドキュメントプロパティ」の2種類があり」,組み込みのドキュメントプロパティはマクロからNo指定して取得・操作できることが分かるなど,かなり参考になりましたが,当初の自分がやりたいことにまでは到達できませんでした。
その他,ExcelマクロでOfficeソフトのドキュメントプロパティを一覧取得できそうだということに関しては,
makoto-watanabe.main.jp
とか参考になりそうでしたが,ファイルの拡張子も x なしだったり,マクロの仕様(?)が古いようで,残念ながらそのまま現状に応用できないようでした。

続いて探索するうちに,Excelマクロで参考になりそうなページが見つかりました。
www.relief.jp
これこれ!と,目的に合うように一部書き換えて,動作させてみたらいくつか不可解な動きはあれど,Wordファイルに加えExcelファイルに対しても,まあまあやりたいことはできるようになりました。
さらにPowerPointファイル用に一部マクロを書き換え試してみたら,1個目のファイルが開いたまま,頓挫。ファイルを閉じて次のファイルにいくところで止まっているらしい。
Close メソッド (PowerPoint) | Microsoft Docs
Open メソッド (PowerPoint) | Microsoft Docs
PowerPointのファイルをOpenしたりCloseしたりするメソッドや,開かれたプレゼンテーションを非表示にするオプションを適宜加えて,何とか動作するようになりました。

しかし・・・まだ問題が残っています。
マクロを実行させると,このようなエラーが出て頓挫することがしばしば起こるのです。
f:id:lionus:20200703161951p:plain
このようなエラーで止まってしまったきっかけになっていると思われるファイルを集め,そのファイル群対象にマクロを実行したところ,当然といえば当然ですが,最初っから同じエラーが出て動きません。
ファイルはあるのに「無いよ」と言われるのは,ファイル名に原因があるのか?と思い,FlexibleFileRenemerというフリーソフトで,ファイル名をあれこれ削ってみたり,ファイル名中の特定の文字列を削ってみたりしましたが,原因?となる文字列が分かりません。
「Flexible Renamer」ファイル名を思い通りに一括変更 - 窓の杜
思い切って,もとのファイル名全消しで,01.docxといった連番のみのファイル名にしたら,正常に動きました。
やはりファイル名中の何かの文字列が悪さをしているようです。
何が悪いのかな・・・とFlexibleFileRenemerの画面を眺めていると,
f:id:lionus:20200703163318p:plain
左の「現在の名前」に含まれる「ビ」という文字が,右の「新しい名前」では「ヒー゜」と表記されています。
これは何?!?!?!
とりあえずファイル名中の「ビ」を削除し,マクロを実行すると正常に動作しました。
なるほどなるほど。
もうひとつこの画面をきっかけに気がついたのは,この(マクロが頓挫する)ファイルたちは,Mac利用者からもらったものが含まれていることです。
Macで作成されたファイルのファイル名に「ビ」や「プ」濁点や半濁点が含まれているのが何かやばいということで,ぐぐっていくつか記事を読んでみたら,色々新しいことを知りました。
HFS+のテキストエンコーディング – ものかの
HFS Plus - Wikipedia
ものかの >> archive >> Unicode正規化 その1

ざっくりと理解したのは,

  • MacではHFS+というファイルフォーマットを使っていて,そこではファイル名フォルダ名にUTF-16のテキストエンコーディングを採用している
  • けれども,それにはMacの独自仕様が混じっていて,素直なUTF-16ではない
  • そのMacの独自仕様UTF-16テキストエンコーディングでは,濁点や半濁点が含まれる文字は1文字ではなく2文字(例:ビ→ヒ゛)で扱われるらしい
  • WindowsOSは,そのMacの独自仕様に対応?していて,エクスプローラ等ではファイル名を適当に”忖度”して表示してくれている

やだねえ。こんなの。
いちいちMacな人のファイルをより分けて処理するというのは現実的ではないので,上記のようなファイル名問題について何か対処法はないのかぐぐっていると,ナイスなフリーソフトが見つかりました。
www.gesource.jp
「ファイル名やフォルダー名をWindowsの流儀に変換」してくれます。
このソフトでファイル群を処理した上で,マクロを実行させると意図通りの作業ができるようになりました。
よかったよかった。有り難いことです(^人^)