タスクスケジューラの設定 OfficeVBAの起動

 Windowsに実装されているジョブ管理アプリケーションであるタスクスケジューラについて、基本的な使い方とOfficeVBAの起動方法を解説します。
 タスクスケジューラを利用できる様になると何が良いかというと、VBAで作成したマクロを指定した日時や繰り返しスケジュール、はたまたWindowsのイベントをキャッチして実行することが可能になります。つまり、ルーチンワークをわざわざ手動で実行しなくとも、Windowsが勝手に実行してくれる様になります。マクロの実行を誰かにお願いすることも無くなりますし、定期実行されるため人間の様に忘れてしまうこともありません。使いこなせる様になると相当便利なジョブ管理アプリケーションです。私は、OfficeのVBA(Excel、Access)やSeleniumBasicの定期実行をこのタスクスケジューラを使って定期実行しています。

目次

タスクスケジューラ ⇒ PowerShellの起動

タスクスケジューラの起動

 タスクスケジューラの起動方法はいくつかありますが、一番簡単な方法は、Windowsデスクトップの検索画面で「タスクスケジューラ」と、入力する方法です。

 タスクスケジューラを起動すると以下の様な画面になっています。次に「タスクスケジューラ ライブラリ」をクリックします。

タスクの作成

 現在、タスクスケジューラで実行するリストが入っています。ChromeやEdgeのバージョンアップもこのタスクスケジューラで実行されていることが分かります。このリスト一覧に新たなタスクを作成します。画面右側メニューに「タスクの作成」がありますので、ここをクリックします。タブメニューの「操作」欄にも同様のメニューがあります。

「タスクの作成」画面が開きます。

全般の設定

全般設定では、以下4つ設定します。入力、選択後、「OK」ボタンをクリックします。

  • タスク名を設定します。(RemoveSeleniumTempFolder)
  • 「ユーザーが尾久恩しているときのみ実行する」を選択します。
  • 「最上位の特権で実行する」のチェックボックスを付けます。
  • OSがWindows10や11の場合、構成で「Windows10」を選択します。

トリガーの設定

 次にトリガーの設定をします。定期実行のスケジュールをここで設定します。タブメニューの「トリガー」を選択し、「新規」ボタンをクリックします。

トリガー設定では、以下5つを設定します。設定後、「OK」ボタンをクリックします。

  • 「スケジュールに従う」を選択します。
  • 今回は「毎日」を選択します。週一の実行をしたい場合は、「毎週」を選択します。
  • タスク実行の開始日を選択します。後日実行したい場合はその日付を選択します。
  • 開始時間を選択します。毎日実行する場合ここで設定した時間で毎日実行されます。
  • 停止するまでの時間を設定します。実行失敗時に備え、停止時間を設定します。

タスクのスケジュール設定が完了しました。

操作の設定

 次に操作の設定をします。実行ファイルをここで設定します。タブメニューの「操作」を選択し、「新規」ボタンをクリックします。

操作設定では、以下3つの設定をします。設定後、「OK」ボタンをクリックします。

  • WindowsPowerShellのexeファイルを指定します。WindowsPowerShellは、環境変数でパスが通っているため、「PowerShell」のみでOKです。
  • フォルダ削除用のPowershellファイル(remove_folder.ps1)を絶対パスでフルパス指定します。フルパスの前に-Command を記入します。
    -Command "C:\TaskScheduler\remove_folder.ps1"
  • 実行ファイルのフォルダパスを入力します。でフルパスを入力しているため、特に設定はしなくても実行可能です。

 操作の設定が完了しました。これで設定は一通り完了したので、「OK」ボタンをクリックして設定を完了します。

タスクスケジューラのメニューにフォルダ削除用タスクが作成されました。

 あとは、設定した時間にタスクが実行されます。または、当該のタスク名で右クリックすると、「実行する」ボタンがありますので、そこから即時実行することもできます。

PowerShell ⇒ OfficeVBAの起動

 OfficeのVBAをタスクスケジューラで実行する場合は、Powershellを介して実行します。
実行手順は、「タスクスケジューラ」⇒「Powershell」⇒「VBA」の順番で実行するイメージです。ファイルの作成手順は、逆にVBAから作成することになります。事前に以下フォルダを作成しておきます。C:\TaskScheduler\Selenium一時フォルダ削除

ExcelVBAの作成

Sub FolderRemove_事前バインディング()
   'VBEの参照設定で、事前に「Microsoft Scripting Runtime」を選択
    Dim ws As Object, UserPath As String, TempPath As String
    Dim fso As New FileSystemObject
    Set ws = CreateObject("WScript.Shell")
    UserPath = Split(ws.SpecialFolders("Desktop"), "Desktop")(0)
    TempPath = UserPath & "\AppData\Local\Temp\Selenium"
    If fso.FolderExists(TempPath) Then fso.DeleteFolder TempPath
End Sub

ExcelVBA実行用のPowershellファイル

PowershellでExcelマクロを実行するコードを紹介します。

$filename = "C:\TaskScheduler\Selenium一時フォルダ削除\ファイル削除_FSO.xlsm"
$xlfile = $filename
$xl = New-Object -Com Excel.Application
$wb = $xl.Workbooks.Open($xlfile)
$xl.Visible = $true
$xl.Run("FolderRemove_事前バインディング")
$xl.DisplayAlerts = $false
$wb.Close()
$xl.DisplayAlerts = $true
#Excelアプリケーションを終了
$xl.Quit()
#COMオブジェクトの参照を解放
[void][System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($xl)

$xl.Visible = $falseに設定すると、バックグラウンドでVBAを起動することができます。

AccessVBA実行用のPowershellファイル

PowershellでAccessマクロを実行するコードを紹介します。

$DBfile = "<AccessFileFullPath>"
$Access = New-Object -ComObject Access.Application
$Access.OpenCurrentDatabase($DBfile)
$Access.Run("VBACodeName")
$Access.CloseCurrentDatabase()
$Access.Quit()
#COMオブジェクトの参照を解放
[void][System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($Access)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

VBAを中心とした自動化、効率化の手法を紹介しています。現在は、SeleniumBasicのexamplesを紹介しています。その内、SeleniumBasic以外の手法も掲載したいと思っております。

目次