Win11でタスクスケジューラ・VBScrip間で不具合

実現したいこと

Windows11でタスクスケジューラを使い、毎日や毎週の指定の時間にマクロを実行させる。

元々Windows10では問題なく使用できていたのですが、Windows11にして不具合が出ました。

前提

Windows10では、タスクスケジューラからVBScripファイルを起動させていました。
タスクスケジューラの[操作]の[プログラムの開始]の[引数の追加]で、
xlsmファイルのパスと実行させるマクロ名を入れ、VBScripに引数を渡していました。

Windows11にアップグレードを行ってから、タスクスケジューラが実行しても
時間切れまで終了せず、またマクロも実行されていましせんでした。
タスクスケジューラの履歴で時間切れで終わる前に「リターンコード 2147942401」を返していることしかわかっていません。

理由は後述しますが、タスクスケジューラとVBScripの間で、不具合が出ていると考えられます。

環境としては、Windows11Pro 23H2です。

タスクスケジューラを使う以外の方法があれば
それでもいいので教えてください。

該当のソースコード

下記がVBScripになります。
先述した通り引数として、Xlsmファイルのパスと実行させるマクロ名を渡してます。
3行目と22行目のWScript.Echo は不具合が出てから記載していますが、表示されませんでした。

Basic

1Option Explicit 2 3WScript.Echo "start"4 5Dim excelApp, workbook 6Dim file, macro 7Dim intArgCount 8 9intArgCount = WScript.Arguments.Count 10 11 12'コマンドライン引数の数を確認 13If intArgCount < 2 Then14 WScript.Echo "使用法: cscript scriptname.vbs [Excelファイルパス] [マクロ名]" 15 WScript.Quit 16End If17 18file = WScript.Arguments(0)19 20macro = WScript.Arguments(1)21 22WScript.Echo "get"23 24On Error Resume Next 'エラーハンドリングを有効にする 25 26Set excelApp = CreateObject("Excel.Application")27 28If Err.Number <> 0 Then29 WScript.Echo "Excelを開始できませんでした。エラー: " & Err.Description 30 WScript.Quit 31End If32 33excelApp.Visible = True ' Excelを表示にする 34excelApp.DisplayAlerts = True ' ポップアップメッセージを表示にする 35excelApp.AutomationSecurity = 1 ' マクロを有効にする 36 37' Excelファイルを読み取り専用で開く 38Set workbook = excelApp.Workbooks.Open(file, True)39 40If Err.Number <> 0 Then41 WScript.Echo "Excelファイルを開けませんでした: " & file & " エラー: " & Err.Description 42 excelApp.Quit 43 Set excelApp = Nothing 44 WScript.Quit 45End If46 47' マクロを実行する 48excelApp.Run macro 49 50If Err.Number <> 0 Then51 WScript.Echo "マクロを実行できませんでした: " & macro & " エラー: " & Err.Description 52Else53 WScript.Echo "マクロの実行が完了しました: " & macro 54End If55 56' Excelを終了する 57workbook.Close False 58excelApp.Quit 59 60Set workbook = Nothing 61Set excelApp = Nothing 62 63If Err.Number <> 0 Then64 WScript.Echo "スクリプトを完了できませんでした。エラー: " & Err.Description 65 WScript.Quit 66End If67

試したこと

VBScripが実行されないのかと思い、下記のコードを書いたVBScripを
タスクスケジューラで引数を入力して実行させたところ、問題なく動き、ちゃんとコメントも来ました。

Basic

1Dim myVar 2myVar = WScript.Arguments(0)3 4WScript.Echo "8row" & myVar 5 6 7' Dim objXls : Set objXls = CreateObject("Excel.Application")8 9 ' Excelの表示 10' objXls.Visible = True 11

WScript.Echo がタスクスケジューラでも動いているということは、
タスクスケジューラとVBScripの間で何かしら不具合が出ていると考えられると思いました。

VBScrip自体に問題があるかもと考え、BATファイルを作り、引数を渡して実行させて見たところ
こちらの想定、実行されてました。

Batch

1echo off2 3REM VBScriptのパス4set VBS_PATH=”VBScriptのパス”5 6REM VBScriptに渡す引数7set ARG1="xlsmファイルのパス"8set ARG2="実行させるマクロ名"9 10REM VBScriptの実行11cscript //NoLogo "%VBS_PATH%" "%ARG1%" "%ARG2%"12 13REM バッチファイルの終了14exit /B

また色々試している際、タスクスケジューラで起動させたVBSコードが文字化けしている事に気づき、
該当のコードのエンコーディングをUTF-8からANSIに変えましたが、変わりませんでした。
(文字化け治りました)

タスクスケジューラのタスクの設定で、「最上位の特権で実行する」も付けていますが効果はありませんでした。

コメントを投稿

0 コメント