#これまでのあらすじ
前回の投稿では、
Application.FileDialogの代わりに、
AppleScriptのchoose folderを使用して、
フォルダ選択ダイアログを表示することまではできました。
あとは、FileSystemObjectで行っていたことを代替する処理を作って
選択したフォルダ内のファイル名を全て取得するだけ!
#そう簡単にはいかなかった
AppleScriptのヘルプにそれっぽいサンプルがありました。
AppleScriptからFinderアプリケーションを呼び出す(tellする)ことで
簡単に実現できそうでしたが、つまずいたポイントがいくつか。
###1.VBAからtellを含むScriptをMacScript(…)で呼び出すとエラーになる
なぜエラーになるのかは結局わかりませんでしたが…
サポートされないMacScript関数を使うのをあきらめ、
サポートされているAppleScriptTask関数を使うことにしました。
こちらを使う場合、スクリプト部分が別ファイルになり、
美しくはあるのですが、チェックツールがExcelブック1つで済まないので
他者に導入してもらうハードルが上がりました。でもやむなし。
###2.スクリプトファイルを読み込んでくれない
マクロブックとスクリプトファイルを同じパスに置いておけば良いという情報を得ましたが、
どうもうまくいかず。。。
以下のパスにスクリプトファイルを置く必要があるようです。
~/Library/Application Scripts/com.microsoft.Excel/
情報元
https://docs.microsoft.com/ja-jp/office/vba/office-mac/applescripttask
https://www.rondebruin.nl/mac/applescripttask.htm
非表示の「ライブラリ」フォルダへのアクセス
https://helpx.adobe.com/jp/x-productkb/global/cpsid_91195.html
###3.POSIXパス問題
finderをtellしてフォルダを開くとき、
POSIX(/Users/ユーザー名/Downloads/…など)形式でパス指定すると動きませんでした。
前回の投稿で作成したスクリプトをMacScript関数で実行すると、
POSIXじゃない形式(Macintosh HD:Users:ユーザー名:Downloads:…)でパスが取得できるのですが、
AppleScriptTask関数で実行するとPOSIXになってしまいました。
スクリプト単体をスクリプトエディタで実行するとPOSIXじゃない形式で返ってくるのですが、
Excel for Mac(2016)がどうやら勝手に変換しているようです。。。
情報元
https://www.rondebruin.nl/mac/mac017.htm
結局、フォルダパスをPOSIXで取得し、使う前に変換をかけることでうまくいきました。
finderをtellしている中では変換がうまくいかなかったため、tellする前に変換しています。
set slctFolder to POSIX path of (choose folder with prompt msg)
set realpath to POSIX file slctFolder
tell application "Finder"
set filelist to every file in folder realpath
end tell
set fnames to ""
repeat with afile in filelist
set fnames to fnames & "," & name of afile
end repeat
return fnames
filenames = AppleScriptTask("chktool_formac.scpt", "getFileListString", Path)
param1:スクリプトファイル名
param2:呼び出すハンドラ名。関数名と考えて良さそう。
param3:ハンドラに渡すパラメータ
#上記以外の参考サイト
大変助かりました。ありがとうございました!
http://d.hatena.ne.jp/zariganitosh/20100924/apple_script_alias_posix_file