ログオフ状態でVBAマクロを実行する方法

たまには技術的なことも書かないとなと思い、VBAネタです。

Windows7が乗ったPCで二台のNASをマウントしてバックアップをとっるていうVBスクリプトを書いてタスクで実行していました。

で、バックアップがこけた時にメールを送信するVBAを呼び出すのですが、どうやらこけたのにメールが飛んで無い。

原因調査の為、タスクスケジューラの履歴を確認。しっかりタスクは実行されている。だけど終わってないぞ。
タスクマネージャからプロセスを確認すると、「wscript.exe」と「EXCEL.EXE」が残っている。


スクリプトの中身がRobocopyでバックアップし、エラーがあったらVBAを呼びだすってフローなのでコピータスクは終了し、VBAを呼びだしたところで止まっている様子。

あれ?作成時に実行したときは問題無かった覚えがあるのですが。
そう、確かにコマンドプロンプトやダブルクリックから実行すると問題なく動くのです。

ですが、タスクに登録し「ユーザがログオンしているかどうかにかかわらず実行する(W)」にチェックを入れていると、タスクから実行された時失敗します。
タスクスケジューラから実行するテストをやってなかった私が悪いですね・・・


エクセルマクロを呼びだしたところで止まってしまってるので、ネットで情報を検索。
ズバリな方法がこちらにありました。

Windows環境でちょっとした定型業務を自動化する:汎用的なツールで作るDB→Excel→メール配信の自動システム (2/2) - @IT


対話的ログオンをしていない場合にエクセルを実行したいなら、以下のフォルダを先に作っておく必要があるようです。

32bitの場合: %SystemRoot%\System32\config\systemprofile\Desktop
64bitの場合: %SystemRoot%\SysWOW64\config\systemprofile\Desktop


しかしながら、マイクロソフトでは非対話的ログオンでのOffice実行は推奨もサポートもしていないようなので、あくまでも自己責任で!

Office のサーバーサイド オートメーションについて


仕事を速くする Excel VBA入門 (日経BPムック)