執筆:EugeneAmnis
Excel for MacでのUTF-8テキストファイル出力方法(AppleScriptTask)実践2
作業の流れの再確認
前前回でも示しましたが、作業の流れは以下の通りです。
- AppleScriptで保存先とテキストを指定し、実行するとUTF-8形式のテキストファイルを保存するスクリプトファイルを作成する。
- 1のスクリプトファイルをExcel VBAのAppleScriptTask仕様に変更し、指定ファルダに保存する。
- 応用編:VBA単一で2を実装する。
- Excel VBA上でOS判定とスクリプトファイルの存在確認をした上で実行する。
今回は2. 1のスクリプトファイルをExcel VBAのAppleScriptTask仕様に変更し、指定ファルダに保存する。を行います。
AppleScriptTask仕様に変更
ExcelのAppleScriptTaskは以下のような形をとっています。
Dim Res as String
Res = AppleScriptTask("AppleScriptファイル名","関数名","引数")
AppleScriptファイル名は拡張子がなくても問題有りません。(気持ち悪いので筆者はつけていますが。)関数名は必須です。引数は文字列のみ指定が可能です。返り値も文字列のみです。尚、明確な確認はしていませんが受け取り側の関数が指定していないで使用するとVBEが構文エラーと判断する場合があります。
AppleScriptTask("AppleScriptファイル名","関数名","引数")
そのため、返り値が無い場合でもValiant型の関数を用意する必要が有ります。(アップデートで直る可能性もありますが)それでは前回作成したAppleScriptをon 関数名(引数) ~ end 関数名で囲み、引数とエラーに対応した形に変更していきましょう。
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
前回と違う部分は”if txtval = “” then”で引数が無い場合はスクリプトを終了し、処理中に例外が発生した場合はfalseを返すようにしただけです。
次にExcel用のスクリプトフォルダに保存します。
スクリプトを指定ファルダに保存する。
Excel 2016 for Mac の VBA についてにも書いてありますが、まず AppleScript を以下のフォルダに設置します。
~/LibraryApplication Scripts/com.microsoft.Excel/
このフォルダの開き方は Finder > 移動(optionを押しながら) > Library > Application Scripts > com.microsoft.Excelです。com.microsoft.Excelがない場合は同名のフォルダを作成します。この中に作成・仕様変更したAppleScriptファイルを保存します。
今回は手動でスクリプトを保存しましたが、配布する場合はできればExcelファイルひとつにしたいと要望があると思います。次回はWebツールA2Vを使用した方法を紹介したいと思います。