Excel 2019 for Mac VBAでAppleScriptをインストールする2

#Excel 2019 for Mac VBAでAppleScriptをインストールする2

あけましておめでとうございます。新年もよろしくお願いします。

[昨年](https://qiita.com/EugenesWorks/items/09153e4d701a239090ae)、VBAでAppleScriptをインストールする方法を書きましたが、その時に２点問題点を上げました。

1. AppleScriptコードのインラインがややこしい
2. 作成したAppleScriptファイルを直接、ハイパーリンクで開けない

今回はその問題点を解決していきたいと思います。

##AppleScriptコードのインラインがややこしい

AppleScriptをVBAインライン化するWEBアプリ[AppleScript2VBA](https://www.the-forme.net/a2v/index.html)を作成しました。

![スクリーンショット 2021-01-09 21.43.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/965663/a421015c-295a-73d7-62af-25f9cc9e0054.png)


UTF-8のAppleScriptファイルをアップロードし、変換するとFunctionの形でインライン化されます。

インライン化されたスクリプトをテキスト出力したものを実行することで自動的に ~/Library/Application Scripts/com.microsoft.Excel/ にインストールされるようになっています。

###サンプルコード

~~~
Sub a2vcheck()

Dim root As String
Dim path1 As String
Dim appscript As String

root = "/Users/Shared"

path1 = root & Application.PathSeparator & "as2vbaTest3.applescript"

MsgBox (path1)

applescript = FormeA2V3()

Open path1 For Output As #2
    Print #2, applescript
Close #2

ActiveWorkbook.FollowHyperlink Address:=root

End Sub

'AppleScript2VBA変換コード

Function FormeA2V3() As String
Dim code As String

code = "set root to (path to home folder) as string" & vbNewLine & "set mkEdir to root & " & ChrW(34) & "Library:Application Scripts:" & ChrW(34) & vbNewLine _
& "set tgtpath to root & " & ChrW(34) & "Library:Application Scripts:com.microsoft.Excel:" & ChrW(34) & vbNewLine & "set mkas to tgtpath & " & ChrW(34) & "test.applescript" & ChrW(34) & vbNewLine & vbNewLine _
& "set asval to "

code = code & ChrW(34) & "on lt8(rpath)" & ChrW(34) & "& linefeed & "
code = code & ChrW(34) & " try" & ChrW(34) & "& linefeed & "
code = code & ChrW(34) & " set txt to read (rpath) as " & Chr(-32397) & "class utf8" & Chr(-32396) & ChrW(34) & "& linefeed & "
code = code & ChrW(34) & " on error number err_num" & ChrW(34) & "& linefeed & "
code = code & ChrW(34) & " set txt to false" & ChrW(34) & "& linefeed & "
code = code & ChrW(34) & " end try" & ChrW(34) & "& linefeed & "
code = code & ChrW(34) & " return txt as text" & ChrW(34) & "& linefeed & "
code = code & ChrW(34) & "end lt8" & ChrW(34)

code = code & vbNewLine & "tell application " & ChrW(34) & "Finder" & ChrW(34) & vbNewLine & "if not (exists tgtpath) then" & vbNewLine & "make new folder at mkEdir with properties {name:" & ChrW(34) & "com.microsoft.Excel" & ChrW(34) & "}" & vbNewLine & "end if" & vbNewLine & "end tell" & vbNewLine _
& vbNewLine & "try" & vbNewLine & "set tfile to open for access file mkas with write permission" & vbNewLine & "set eof of tfile to 0" & vbNewLine & " write asval to tfile" & vbNewLine & "end try" & vbNewLine & vbNewLine & "close access tfile" & vbNewLine & vbNewLine _
& "tell application " & ChrW(34) & "Finder" & ChrW(34) & vbNewLine & " open tgtpath" & vbNewLine & "end tell"

FormeA2V3 = code

End Function
~~~

##作成したAppleScriptファイルを直接、ハイパーリンクで開けない

試行錯誤した結果、先に同名の空ファイルを作成した後に上書きすることでハイパーリンクで開けるようになりました。十分時間をあける必要があるようです。

これはあくまで想定ですが、OSがインデックスファイルを作成する前にハイパーリンクで開くとエラーが発生するように見受けられました。

##実際の挙動

実際に実装したGIFがこちらです。

![formeA2Vinstall.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/965663/3913e474-2f64-3535-46d7-d1495e805ba4.gif)

実装する場合はユーザーに警告を表示したりとしっかり説明する必要があると思います。

AppleScript2VBAはMIT Licenseなので自由にお使いください。バグが発生した場合は[私のサイト](https://eugenesworks.com/)から連絡していただければ幸いです。