執筆:EugeneAmnis
Excel VBA で AppleScript を作成する
Windows版の Excel では createObject関数を使用する事で OS の機能の多くを利用する事ができますが、Mac版では createObject関数は使用できずにAppleScriptを代用する必要があります。
Excel 2016 for Mac からインライン型の MacScript関数が廃止され、変わりに AppleSriptTask関数を使用する必要があります。 ここでは ApplescriptTask関数の使い方と VBA で AppleScript の存在判定方法と AppleScript の作成方法について書いていきます。
AppleScriptTask関数の使い方
Excel 2016 for Mac の VBA についてにも書いてありますが、まず AppleScript を以下のフォルダに設置します。
~/LibraryApplication Scripts/com.microsoft.Excel/
このフォルダの開き方はここで説明しています。
次に VBA 内で以下のようにコーディングをします。
val = AppleScriptTask("AppleScriptファイル名", "AppleScript名", "引数")
AppleScriptファイル名は拡張子は不要とされていますが、分かりやすくするために付けることを個人的には推奨します。引数は必須ではありません。AppleScript が何も返さない場合は関数に入れる必要はありません。
AppleScript の存在判定方法
AppleScript の存在判定方法は標準で用意されていないので、例外処理を使用します。
Sub appleScriptCheck()
On Error GoTo 256
Dim buf As String
buf = AppleScriptTask("FormeGetFiles.applescript", "ls", "")// AppleScript を実行する
Exit Sub
256
ここに AppleScript が処理を書く
End Sub
毎回、この判定をするのは現実的ではないので WorkBook が開いたタイミングで判定をします。
VBA での AppleScript 作成方法
基本的にはテキストファイルの出力と同じです。以下のコードはNameステートメントと同じ動きするAppleScript を作成します。
Dim appscript1 As String
appscript1 = "on fm(paths)" & vbNewLine & "set tmp to AppleScript's text item delimiters" _
& vbNewLine & "set AppleScript's text item delimiters to "",""" _
& vbNewLine & "set dirItems to every text item of paths" _
& vbNewLine & "set fpath to (item 1 of dirItems)" _
& vbNewLine & "set bpath to (item 2 of dirItems)" _
& vbNewLine & "set AppleScript's text item delimiters to tmp" _
& vbNewLine & "tell application ""Finder""" _
& vbNewLine & "move (POSIX file fpath as text) to (POSIX file bpath as text) with replacing" _
& vbNewLine & "end tell" & vbNewLine & "end fm"
Dim path2 As String
path2 = 任意のパス & "FormeFileMove.applescript"
Open path2 For Output As #3
Print #3, appscript1
Close #3
インラインで書いている為大変見づらいですが、作成された AppleScript を指定フォルダに設置して完了です。
可能であれば保存場所を直接指定できればいいのですが、AppleScript では難しいようです。ただ、これにより Excelファイル一つで配布できるようになりました。