y3b5の備忘録

忘れそうなお仕事メモを書くようにしています。

Excel VBAを指定時間に自動実行

Excel VBAを指定時間に自動実行したかったけど、Windows Server 2008Excel 2007では、うまく実行できなかった。
(手動実行ではちゃんと動作している)

いろいろ試行錯誤をしてエラー内容を確認すると、こんな結果が出ていた。

Microsoft Office Excel: ファイル ○○ にアクセスできません。
次のいずれかの理由が考えられます。
・ ファイル名またはパスが存在しません。
・ ファイルが他のプログラムによって使用されています。
・ 保存しようとしているブックと同じ名前のブックが現在開かれています。

このエラーメッセージをもとに検索してみると、原因と思われる答えを発見。

http://social.technet.microsoft.com/Forums/ja-JP/windowsvistaja/thread/d42e3ed2-4fec-4f7f-b388-9a0764024fe9

おもいっきり推測ですが、Workbooks interface の Open method は実行時に ROT (Running Object Table) を check しに行くのかもしれません。その際に Task Scheduler で起動した process は Interactive では無いため、そこで制限に引っ掛かているのではないかと。

なお、server-side での Office application はずっと以前から非推奨となっていたため、使えなくなったとしても何の不思議もないような気がします。

今まで、Windows Server 2000とか使っていたので知らなかったけど、どうやら制限が厳しくなった様子。

http://support.microsoft.com/kb/257757/

マイクロソフトは、現在のところ、無人の非対話型クライアント アプリケーションまたはコンポーネント (ASPASP.NET、DCOM、および NT サービスを含む) からの Microsoft Office アプリケーションのオートメーションに関して、推奨もサポートも行っていません。それは、このような環境で Office を実行した場合、Office で不安定な動作やデッドロックが発生する可能性があるためです。

ばっさり見放されているとは知らなかった。
需要は多いと思うけど・・・

結局、フリーソフトのタイマーアプリから実行してあげることで暫定対処。*1

*1:今回は、窓の杜からMulti Function Alarmというソフトを取ってきた