LoginSignup
6
4

More than 5 years have passed since last update.

VBAからのAppleScript呼び出し その2

Posted at

これまでのあらすじ

前回の投稿では、
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する前に変換しています。

POSIXで取得
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
VBA側(呼び出し元)
filenames = AppleScriptTask("chktool_formac.scpt", "getFileListString", Path)

param1:スクリプトファイル名
param2:呼び出すハンドラ名。関数名と考えて良さそう。
param3:ハンドラに渡すパラメータ

上記以外の参考サイト

大変助かりました。ありがとうございました!
http://d.hatena.ne.jp/zariganitosh/20100924/apple_script_alias_posix_file

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4