執筆:EugeneAmnis
Excel for MacでのUTF-8テキストファイル出力方法(AppleScriptTask)実践4
作業の流れの再確認
念の為に作業の流れは以下の通りです。
- AppleScriptで保存先とテキストを指定し、実行するとUTF-8形式のテキストファイルを保存するスクリプトファイルを作成する。
- 1のスクリプトファイルをExcel VBAのAppleScriptTask仕様に変更し、指定ファルダに保存する。
- 応用編:VBA単一で2を実装する。
- Excel VBA上でOS判定とスクリプトファイルの存在確認をした上で実行する。
今回は4. Excel VBA上でOS判定とスクリプトファイルの存在確認をした上で実行する。を行います。
実践
ここまでくれば話は簡単です。基本的なOS判定は以下のコードとなります。
On Error GoTo 256
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以降の処理(AppleScriptTaskをここで使用する)
#end if
end if
end if
OSがMacであった場合のスクリプトファイルの存在確認はVBAではよく利用する***on error ***を利用します。エラーが発生し、OSがMacであった場合にはスクリプトのインストールを開始する方法をとっています。
Exit Sub
256
If Application.OperatingSystem Like "*Mac*" Then
'インストール措置またはスクリプトファイルのないことを伝える。
End If
ここでエラー番号で詳細な動作の振り分けを行えば良いのですが、筆者がはじめてこのコードを書いた際にスクリプトが存在しない独自のエラー番号を確認できなかったため、大雑把なままにしています。
もし詳細に判定したい場合はdir関数を利用することが可能かもしれません。ただパスの指定に癖があるのとアクセス制限が発動する可能性が高いことを鑑みると試す気にはならないのが本音です。
一部のパスに対してのアクセス制限の簡易試験をしてみました。こちらからお読み下さい。
完成
すべてのコードは以下となります。
AppleScript
on st8(txtval)
if txtval = "" then
return
end if
tell application "Finder"
activate
try
set dpath to choose file name with prompt "Input New FileName." default name "newdata.csv"
set spath to (dpath as string)
if (offset in spath of ".") = 0 then
set spath to spath & ".txt"
end if
try
set tfile to open for access file spath with write permission
set eof of tfile to 0
write txtval to tfile as «class utf8»
end try
close access tfile
on error number err_num
false
end try
end tell
end st8
VBA
sub saveUTF8txt()
Dim as txtValue as String
On Error GoTo 256
txtValue = ActiveCell.Value
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
Dim Res as String
Res = AppleScriptTask("AppleScriptファイル名","st8",txtValue)
'この形にしないと構文エラーが出やすい
#end if
end if
end if
Exit Sub
256
If Application.OperatingSystem Like "*Mac*" Then
'インストール措置
End If
end sub
実行結果
実行してみるとAppleScriptのファイル保存ダイアログが表示され、保存場所と名前を指定することでUTF-8形式のテキストファイルが保存されていることが確認できます。
この方法でははじめてアクセスするパスでもアクセス権の譲渡確認ダイアログが表示されないのがメリットだと言えます。
長い記事になってしまい、読みづらくなってしまったかもしれませんが、他の機能を持ったVBAもほぼ同じような手順で作成することができます。
リンク
リンク