#動かないマクロ
私はずっとWindowsを使っていて、最近Macを使い始めました。
これまで書類のチェックにExcelマクロを使っていたのですが、
Excel for Mac(2016)だと一部動かない箇所がありました。
- Application.FileDialog
- FileSystemObject
他にもあるのかもしれませんが、今のところこの2つ。
解決策をググってみると、
動かない箇所をAppleScriptで代替してね、ということのようでした。
以下の形式で、VBAからAppleScriptを呼び出せました。
MacScript(AppleScript文字列)
…が、下記ページによると、この関数は廃止されたとのこと。
https://msdn.microsoft.com/ja-jp/vba/language-reference-vba/articles/macscript-function
代わりに「AppleScriptTask」という関数を使うのが良いようです。
…う〜ん。時間ないので、次回直すとして、今回はMacScript関数を使っちゃいます。
#AppleScript
###AppleScriptとは?###
Appleが開発したスクリプト言語。
Windowsのバッチファイルに近い役割だけれど、
それよりわかりやすく高性能、と感じました。
###私の習得方法###
基本、ヘルプを頼りにしました。
Macに標準でインストールされている「スクリプトエディタ」を起動し、
ヘルプ > AppleScriptヘルプを表示 で概要が掴めました。
詳細なリファレンスは、
ヘルプ > AppleScript Language Guide を表示 で。
こちらは全部英語なので、わからない単語が出てきたら都度3本指タップで意味を調べました。
#できあがったコード
'Mac用
If Application.OperatingSystem Like "*Mac*" Then
Dim macscr As String
macscr = "" & _
"try" & vbCrLf & _
"set slctFolder to choose folder with prompt ""ディレクトリを選択してください""" & vbCrLf & _
"return slctFolder" & vbCrLf & _
"end try"
fPath = MacScript(macscr)
ws.Cells(5, 2).Value = fPath
Exit Sub
End If
'Windows用
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "C:"
If .Show = -1 Then 'ファイルダイアログ表示
' [ OK ] ボタンが押された場合
fPath = .SelectedItems(1)
'フォルダパスを表示
ws.Cells(5, 2).Value = fPath
End If
End With
#少し解説
最初のif文はMacであることを判別するためのものです。
If Application.OperatingSystem Like "*Mac*" Then
汚いですが、以下がAppleScript部分です。
末尾の & vbCrLf & _ が鬱陶しいですが、改行を入れないとエラーになってしまうため入れています。
macscr = "" & _
"try" & vbCrLf & _
"set slctFolder to choose folder with prompt ""ディレクトリを選択してください""" & vbCrLf & _
"return slctFolder" & vbCrLf & _
"end try"
###try〜end[try]###
エラーをキャッチするためのもの。フォルダの選択をせずにキャンセルするとエラーが発生するのでこれで回避。
###set 変数名 to 値###
変数に値をセットする。
###choose folder [with prompt]###
フォルダ選択ダイアログを表示する。
#今回解決したこと
Application.FileDialogで行っていたことはAppleScriptで代替できました。
FileSystemObjectの方はまだです。
フォルダ内のファイルを全て取得してコレクション変数に入れるために使っていますので、
それの代替処理を作るのが次のステップです。