LoginSignup
3
0

More than 3 years have passed since last update.

Excel 2019 for Mac OS判定とAppleScriptTask利用方法

Posted at

Excel 2019 for Mac OS判定とAppleScriptTask利用方法

Excel 2019 からライセンス体系が変わり、永続版のWindows版とMac版両方をインストールする事が可能になりました。また Office365 でも同じようにインストールが可能になっています。OS の垣根を越えてアプリが使えるようになるのは素晴らしい事ですが、 VBAプログラマーの悩みが増えることも事実です。

Windows版のCreateObjectが全て使えないのは勿論、セキュリティ関連のダイアログにより操作性が失われる事も考慮しなくてはなりません。これらの問題を回避するのはAppleScriptを使用するしかありません。

OS判定方法

OS事に処理を変える以上、判定方法が必要になります。私が開発しているAndroid ハンディターミナルアプリ Formeではデータの管理の為にWindowsとMac両OSに対応したエクセルファイルFormeCollector2.xlsmをインクルードしています。そこで利用しているコードがこちらです。

If Not Application.OperatingSystem Like "*Mac*" Then
    Windowsの処理
else
    If val(Application.Version) < 15 Then
        Excel2011 for Macの処理
    else
        #If MAC_OFFICE_VERSION >= 15 Then
            Excel2016 for Mac以降の処理
         #end if
    end if
end if

Mac版ではExcel2011とExcel2016以降の判定分けをMAC_OFFICE_VERSIONで行っていますが、Excel2016以降のみを対応している場合は不要です。尚、コードが冗長になっていますが安定性重視でこのような形になっています。

実際に利用される際は独自関数にする事をお勧めします。私自身はいつかやろうと思いながら、ここまで放置していますが・・・。

以前の方法 : MacScript関数

Excel2011ではVBA内にAppleScriptをインラインで記述し、MacScript関数で実行する事ができましたが、Excel2016以降、セキュリティ上の観点から廃止されました。Excel2019で実行するとエラーにはなりませんが、常にFALSEが帰ってきます。

Sub MacScriptTest()

//フォルダ選択ダイアログ(選択したフォルダの絶対パスが返ってくる)

Dim str As String
Dim appscript As String
appscript = "tell application ""Finder""" & vbNewLine & "try" & vbNewLine & "choose folder with prompt ""formeCSVmodule""" _
& vbNewLine & "on error number err_num" & vbNewLine & "False" & vbNewLine & "end try" & vbNewLine & "end tell"

str = MacScript(appscript)
If str <> "False" Then
    ActiveCell.value = Replace(str, "alias ", "")
Else
    ActiveCell.value = "False"
End If

End Sub

Excel2019結果
mac2019.png
Excel2011結果
mac2011.png
尚、Windows版で実行するとエラーが発生します。OS判定は必ず必要です。
macscript.PNG

AppleScriptTaskの使い方

利用するまでの手順は主に2段階となります。

  1. スクリプトファイルを ~/Library/Application Scripts/com.microsoft.Excel/に保存する。
  2. VBA内でAppleScriptTaskからスクリプトファイルを呼び出す。

1.が特に厄介です。ライブラリーフォルダは通常操作ではみる事ができないので、ターミナルか Finder > 移動(optionを押して) から移動する必要があります。
libraryfolder.gif
配布の点ではかなりハードルが高くなります。次の2.VBA内でAppleScriptTaskからスクリプトファイルを呼び出すはそこまで難しくありません。

Sub ASTaskTest()

Dim dirpath As String

dirpath = AppleScriptTask("AppleScriptファイル名(拡張子不要)", "スクリプト名", "引数")

End Sub

もし存在しないAppleScriptファイルを呼び出した場合エラーが発生します。これもWindows版ではエラーが発生するのでOS判定は必ず必要です。
キャプチャ.PNG

FormeCollector2.xlsmではスクリプトファイルがない場合は自動的に作成するようになっています。VBAではライブラリーフォルダにアクセスできないので、移動はユーザーにしてもらう必要があるのが難点ですが、別にインストールアプリを配布するなどして工夫しています。

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