執筆:EugeneAmnis
Excel 2019 for Mac のファイルアクセス権限
MacOS Mojave から Mac のアプリはセキュリティが強化され、操作毎にアプリが初めてアクセスするファイルやフォルダに権限を与える作業が必要になりました。Excel 2019 ではどのような操作の時にアクセス権付与作業が出るのかを前回のコードを例に確認していきましょう。
また、回避するにはどうしたら良いかを紹介します。
アクセス権付与作業が出たVBAコード
アクセス権付与作業が出たVBAコードは以下になります。すべて最初に一度、アクセス権付与をすると出なくなります。
Nameステートメント
Sub FileMove()
Dim file As String
Dim dir As String
file = Range("B2").value
dir = Range("B3").value & Application.PathSeparator & "sample.csv"
Name file As dir
End Sub
dir関数
Sub dirTest()
Dim buf As String, i As Integer
buf = dir(Range("B3") & Application.PathSeparator & "*.csv")
i = 10
Do While buf <> ""
Cells(i, 2).value = buf
buf = dir()
i = i + 1
Loop
End Sub
これら以外にもファイルサイズを調べるだけでもアクセス権を付与が必要になります。
設定 > セキュリティーとプライバシー > プライバシー でファイルとフォルダのアクセス権を与えても個別に許可する必要があります。ただし、一度アクセス権を付与すると別のExcelファイルでもアクセス権は維持されます。
実際のアクセス権付与作業
1.実際のアクセス権付与作業はまず、以下のダイアログが表示されたら指示通りにファイルまたはフォルダを選択する。
2.アクセス権を付与する。の2段階になっています。
一回だけなら問題ないでしょうが、ファイルアクセスをする VBAコードは全く同じファイルのみをアクセスするとは考えづらいですし、バックグラウンドで処理をする場合は処理が止まってしまう事が考えられます。
更に dir関数でフォルダのアクセス権を付与しても、そのフォルダ下のファイルを開く場合はまたアクセス権の付与が必要になります。
回避策
AppleScriptTask を使って AppleScript でファイルアクセスを行うと最初の一回のみですべてのアクセスが可能になります。実際は SystemEvent.app にオートメーションの権限を与える形になります。正確ではないかもしれませんが、Excel の仲介アプリである SystemEvent.app にオートメーション(自動化)権限を与えて良しとしているようです。Excel に直接与えてはいかがでしょうと思いますが、難しい問題があるのかもしれません。
AppleScriptTaskの使用方法はExcel 2016 for Mac の VBA についてで解説しています。更に詳しい情報は Microsoft のリファレンスに載っています。AppleScriptの自作が難しい方は AppleScript インストール支援アプリ FormeVBAassist.app(MIT LICENSE)をご利用ください。