タスクスケジューラで、5分間隔でPowerShellからExcelを起動する。

タスクスケジューラから起動したマクロBOOKは動くのか?

定期的に処理したものがある場合、Windowsであれば「タスクスケジューラ」に登録して時間を設定しておけば処理されます。今回の主眼は、2点。

1 タスクスケジューラから起動したExcelのWorkbook.Openイベントは対応するか。
2 スケジューラに5分間隔で実行する設定はできるのか。

結論から言うとできました。
以下、設定要領をまとめます。


目次
 1 閲覧対象者
 2 得られる効果
 3 タスクスケジューラを設定する手順

1 閲覧対象者

タスクスケジューラって何なの?という初心者の人。

2 得られる効果

タスクスケジューラの設定の仕方がわかる。

3 タスクスケジューラを設定する手順

環境

OS:Windows10 
Excel2019 
PowerShell ver:5.1.18362.752

手順1 Excelを開くPowerShellを作る。

PowerShellの拡張子は「.ps1」です。
メモ帳に記述し、拡張子を変更します。

$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true      # 画面上に表示する
$excel.DisplayAlerts = $flase # 警告メッセージは表示しない

# 現在のディレクトリの絶対パスを取得
$currentPath = (Convert-Path .)

# 対象の Excel ファイル名
$filename = 'PowerShell_Open.xlsm'
$book = $excel.Workbooks.Open($currentPath + "/" + $filename)

# 上書き保存
$book.Save()

# ブックを閉じる
$excel.Workbooks.Close()

$excel.Quit()

# 後処理
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($book)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)

上のコードはExcelを開いて保存するだけのps1コードです。
これでExcelを開くShellが準備できました。

手順2 Workbook.Openイベントを記述した「マクロ有効BOOK」を準備する。

ここでは、開いたらA1セルを+1するものを作りました。

手順3 タスクスケジューラに登録する。(1~12)

1 タスクスケジューラを開く。
2 タスクスケジューラライブラリをクリック。
3 基本のタスクの作成をクリックする。
f:id:bimori466:20200518222809p:plain

4 基本タスクの作成ウィザードが開くので、「名前」「説明」を記入する。
f:id:bimori466:20200518223309p:plain

5 トリガーを毎日にする。
f:id:bimori466:20200518223625p:plain

6 「開始」「間隔」を設定する。(後で再設定するので、ここは適当でいいです。)
f:id:bimori466:20200518224103p:plain

7 「操作」をプログラムの開始時にする。
f:id:bimori466:20200518224224p:plain

8 1:%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
  2:-Command "実行するps1のフルパス"
  3:実行するps1が入っているパス(””でくくらない)
f:id:bimori466:20200518225212p:plain

9 完了をクリック
f:id:bimori466:20200518225709p:plain

10 タスクが作成された。
f:id:bimori466:20200518230108p:plain

11 処理時間を設定する。タスクを右クリックし、プロパティをクリック。トリガーを編集する。(8時に起動、5分おきに処理する。)
f:id:bimori466:20200518231500p:plain

12 トリガー編集後のタスクの表示
f:id:bimori466:20200518231633p:plain


以上で終了です。

5分おきにps1が実行され、A1セルを+1していきます。
この処理意味はないので、+1を必要な処理に変更すればOKです。