タスクスケジューラの機能でログオフ状態でもタスクスケジューラを起動させることができます。タスクスケジューラーを実行するに当たって、PCの電源は付けている状態にしなければなりませんが、スリープ状態でもタスクスケジューラを実行したい時に役に立つかと思います。しかし、タスクスケジューラをログオフ状態で実行するには注意点もありますのでその点も触れながら説明していきたいと思います。
仮想デスクトップフォルダの作成
OfficeVBAをタスクスケジューラで実行するためには、仮想デスクトップフォルダの作成が必要となります。
- 32bit版 - C:\Windows\System32\config\systemprofile\Desktop
- 64bit版 - C:\Windows\SysWOW64\config\systemprofile\Desktop
デスクトップフォルダの作成は手動で行っても構いませんし、PowerShellやコマンドプロンプトで作成しても問題ありません。システム関連のディレクトリ内にフォルダを作成するため、PowerShell、コマンドプロンプトは管理者権限で開く必要があります。
mkdir C:\Windows\System32\config\systemprofile\Desktop
mkdir C:\Windows\SysWOW64\config\systemprofile\Desktop
タスクスケジューラでOfficeVBAの起動することは、Microsoftでは非推奨となっています。基本的にOfficeVBAは非対話型(ログオフ状態)で実行される事を想定していない様です。OfficeVBAをログオフ状態で実行して不具合が発生しても仕様の範囲内として考える必要があります。OfficeVBAをタスクスケジューラで実行する場合はログオン状態で実行することを基本にした方が良いです。
タスクスケジューラの設定
全般設定
タスクスケジューラのプロパティ全般設定で「ユーザーがログオンしているかどうかにかかわらず実行する」を選択します。ログイン情報を保存するため、「パスワードを保存しない」はチェックしません。
条件設定
条件設定タブで「タスクを実行するためにスリープを解除する」を選択し、OKボタンをクリックします。
ログイン情報の登録
設定を完了し、OKボタンをクリックすると、ログイン情報の入力が求められます。PCログイン時のパスワードを入力してOKボタンをクリックします。
以上で設定は完了しました。あとは、テストのためにタスクスケジューラのフロント画面にて手動で動作確認をしておくと良いと思います。
動作検証
今回の設定はログオフ状態でも実行できる設定ですのでタスクの実行はバックグラウンドで実行されます。ですので、実行の遂行状況を目視で確認することはできません。
試しにChromeドライバーの更新作業をExcelVBAで実行してみたところ、ダウンロードに失敗してしまいました。ダウンロード作業もPowerShellで実行するコードで実行したところ、ダウンロードからファイル移動の作業は無事成功しました。Chromeドライバーの自動更新については以下ページを参照してみてください。
今回の動作の違いに現れているとおり、OfficeVBAをログオフ状態で実行はしない方が良い事が分かりました。