photo credit: COG LOG LAB. via photopin cc
誰の役に立つのかわからないのですが、自分用のメモとして。
前提
あるURLをGETで叩くと、ファイルがダウンロードされるとします。そのダウンロードしたファイルはウェブ側でランダムなファイル名がつけられるとします。
この場合ダウンロードしたファイルを自分で指定するのではなく、VBAの中からダウンロードフォルダを参照して一番新しいファイルのパスを取得して、処理対象ファイルを特定してしまいたいと思います。
MacのExcelVBAでファイル操作するならAppleScriptが一番簡単
WindowsのExcelVBAばかりを触ってきた僕のような人には、入り口はとっつきづらいですが、慣れてしまえばファイル操作関係はAppleScriptに任せてしまうのが一番簡単です。AppleScriptでダウンロードフォルダの中のファイルを引っ張って、一番新しいファイルのパスを取得するには以下のように書きます。
tell application "Finder"
set myfiles to (sort (get files of (path to downloads folder)) by creation date)
set myfile to end of myfiles as alias
return myfile
end tell
試しに、MacのAppleScriptエディタから上記をコピーして貼り付けて実行して見てください。
ご自身のダウンロードフォルダの中のファイルで一番新しいファイルのパスが返されるかと思います。
あとは、これをExcelVBAから呼びだしてあげます。
ExcelVBAからの呼び出しは、MacScriptで。
お決まりですが、ExcelVBAからAppleScriptを実行するには、MacScriptで行います。s= "tell application ""Finder""" & vbCrLf & _
"set myfiles to (sort (get files of (path to downloads folder)) by creation date)" & vbCrLf & _
"set myfile to end of myfiles as alias" & vbCrLf & _
"return myfile" & vbCrLf & _
"end tell"
myfile = MacScript s
実はこれ、iPhoneから更新しているので本当にこのままで動くのかやや不安なのですが。
たぶん、ダブルコーテーションの書き方とスペースの取り方を間違えてなければ動くはずです。
これで、Myfileにダウンロードフォルダの一番新しいファイルのパスが返ってきます。
最後に
AppleScriptを使うと、えっ!これもMacのExcelVBAだと出来ないの!?と思っていた事が大抵できるようになります。AppleScriptエディタも意外と使ってみると簡単に使えますので、なんか難しそうと思って敬遠していた方は是非使ってみてください。
プログラマーでなくても意外とできます。
以上です。