【VBA】Excel マクロでのファイル自動保存処理をMac対応に拡張した話
今回は、社内で使用しているツールにて発生した不具合報告対応について共有します。
問題が発生したのは、Excelのマクロで実行されるファイルの自動保存処理でした。
処理としては、
- 社内のファイルサーバーに保存されているファイルへの書き込み
- もしファイルがなければ生成して保存
- ネットワークに接続できなければローカルへ保存
という仕組みになっています。
しかし、社内のMacユーザーから「実行するとエラーが出る」という報告がありました。
調査したところ、原因は「パスがWindows固定で記述されていた点」にありました。
背景
普段はWindows端末での動作を前提にしていたため、
- ネットワークドライブ(Z:\~)へ書き込み
- 接続できない場合はWindowsのUSERPROFILE\Documentsへ書き込み
という処理を記述していました。
ところが、Mac上のExcel VBAでは、
- Z:\ のようなドライブ文字は存在しない
- \Documents\ ではなく、/Users/ユーザー名/Documents/ の形式になる
- Environ(“USERPROFILE”) が空になる場合もある
といった違いがあります。
そのため、Macで実行すると フォルダの生成に失敗 → エラー という状況が発生していました。
対応方針
Macの場合とWindowsの場合で、保存先を切り替える処理を追加しました。
判定には VBA の Application.OperatingSystem を利用し、
If Application.OperatingSystem Like "*Mac*" Thenで、OSを判定しています。
修正したコード(抜粋)
以下が今回追加した Mac と Windows の分岐処理です。
変換関数のコード例
' 保存先に接続できなかった場合のローカル退避先
If Application.OperatingSystem Like "*Mac*" Then
localFolder = Environ$("HOME") & "/Documents/Test/"
Else
localFolder = Environ$("USERPROFILE") & "\Documents\Test\"
End If処理のポイント
● Mac
USERPROFILE が正しく取得できないケースがあるため
HOME 環境変数 (/Users/username/) を使用
パス区切りは / を使用
● Windows
既存の USERPROFILE をそのまま使用
パス区切りには \ を使用
結果
この修正により、Windows / Mac のどちらでもファイルが正常に保存されるよう改善できました。
現在はMacユーザーからの「エラーで動かない」という報告は解消しています。
今後、VBAを利用した仕組みを作る際には、可能な範囲でMacも想定しておくことが重要だと痛感しました。
最後に
調べるとすぐに理解して解決できるようなことも、事前に全く知識がない分野だと「どこに問題があるのかがわからない」や「何を調べればいいのか検討がつかない」などといった状況になることがあります。
そのため具体的な対応方法までは頭に入れておかずとも、OSによってパスの参照方法に違いがあると頭に入れておくと、解決速度が向上することがあるかもしれません。
同じようなシステムを運用されている方の参考になれば幸いです。
以上、Excel VBAにおけるファイル保存処理のMac対応報告でした。
このカテゴリの最新記事
2024.08.07
2024.01.12
2023.04.10
2024.07.23