LoginSignup
0
0

More than 3 years have passed since last update.

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

Posted at

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

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

昨年、VBAでAppleScriptをインストールする方法を書きましたが、その時に2点問題点を上げました。

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

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

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

AppleScriptをVBAインライン化するWEBアプリAppleScript2VBAを作成しました。

スクリーンショット 2021-01-09 21.43.55.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

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

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

0
0
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
0
0