web-dev-qa-db-ja.com

Windowsタスクスケジューラを使用してxlsmファイルの繰り返しスケジュールを設定する方法

xlsxマクロ対応ファイルがあります。毎日午前9時にタスクマネージャーがブックを開き、マクロを起動し、ブックを閉じるように、タスクマネージャーで設定するにはどうすればよいですか。

これまで私は使用しています

Application.OnTime . . .

しかし、xlsmファイルを開いたままにしておくのは不便であることを認識しています

9
Andrei Vasilev

あなたが示したように vbs を使用する方が良い

  1. 単純なvbsを作成します。これは、。vbs拡張子を持つテキストファイルです(以下のサンプルコードを参照)
  2. タスクスケジューラを使用してvbsを実行します
  3. vbsを使用して、スケジュールされた時間にworkbookを開き、次のいずれかを実行します。
    • ThisWorkbookモジュールのPrivate Sub Workbook_Open()イベントを使用して、ファイルが開かれたときにコードを実行します
    • より堅牢に(マクロを開くと無効になる場合があるため)、Application.Runマクロを実行するvbs

WindowsタスクスケジューラでExcelを実行する の後者のアプローチの例を参照してください。

サンプルvbs

Dim ObjExcel, ObjWB
Set ObjExcel = CreateObject("Excel.application")
'vbs opens a file specified by the path below
Set ObjWB = ObjExcel.Workbooks.Open("C:\temp\rod.xlsm")
'either use the Workbook Open event (if macros are enabled), or Application.Run

ObjWB.Close False
ObjExcel.Quit
Set ObjExcel = Nothing
14
brettdj

これを行ってくれたKimのブログを紹介しました。 ブログを参照

マクロの自動実行は、指定された時間にWindowsタスクスケジューラによって呼び出されているVBスクリプトファイルの助けを借りて達成できます。

「YourWorkbook」を開くブックの名前に置き換え、「YourMacro」を実行するマクロの名前に置き換えてください。

VBスクリプトファイル(RunExcel.VBSという名前))を参照してください。

    ' Create a WshShell to get the current directory
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")

' Create an Excel instance
Dim myExcelWorker
Set myExcelWorker = CreateObject("Excel.Application") 

' Disable Excel UI elements
myExcelWorker.DisplayAlerts = False
myExcelWorker.AskToUpdateLinks = False
myExcelWorker.AlertBeforeOverwriting = False
myExcelWorker.FeatureInstall = msoFeatureInstallNone

' Tell Excel what the current working directory is 
' (otherwise it can't find the files)
Dim strSaveDefaultPath
Dim strPath
strSaveDefaultPath = myExcelWorker.DefaultFilePath
strPath = WshShell.CurrentDirectory
myExcelWorker.DefaultFilePath = strPath

' Open the Workbook specified on the command-line 
Dim oWorkBook
Dim strWorkerWB
strWorkerWB = strPath & "\YourWorkbook.xls"

Set oWorkBook = myExcelWorker.Workbooks.Open(strWorkerWB)

' Build the macro name with the full path to the workbook
Dim strMacroName
strMacroName = "'" & strPath & "\YourWorkbook" & "!Sheet1.YourMacro"
on error resume next 
   ' Run the calculation macro
   myExcelWorker.Run strMacroName
   if err.number <> 0 Then
      ' Error occurred - just close it down.
   End If
   err.clear
on error goto 0 

oWorkBook.Save 

myExcelWorker.DefaultFilePath = strSaveDefaultPath

' Clean up and shut down
Set oWorkBook = Nothing

' Don’t Quit() Excel if there are other Excel instances 
' running, Quit() will shut those down also
if myExcelWorker.Workbooks.Count = 0 Then
   myExcelWorker.Quit
End If

Set myExcelWorker = Nothing
Set WshShell = Nothing

これをテストできますVBコマンドプロンプトからのスクリプト:

>> cscript.exe RunExcel.VBS

VBスクリプトファイルとワークブックがテストされ、希望どおりに動作するようになったら、Microsoftタスクスケジューラ(コントロールパネル->管理ツール->タスクスケジューラ)を使用して ' cscript.exe RunExcel.vbs 'が自動的に作成されます。

マクロのパスは正しい形式で、次のような単一引用符で囲む必要があります。

strMacroName = "'" & strPath & "\YourWorkBook.xlsm'" & 
"!ModuleName.MacroName"
5
rchacko

つの重要な手順-Excel.xls(m)ファイルをタスクスケジュールする方法

単純に

  1. .vbsファイルが正しいことを確認してください
  2. タスクスケジューラで[アクション]タブを正しく設定する
  3. 「ユーザーがログオンしているかどうかに関係なく実行する」をオンにしないでください

詳細...

  1. これは.vbsファイルの例です

`

'   a .vbs file is just a text file containing visual basic code that has the extension renamed from .txt  to .vbs

'Write Excel.xls  Sheet's full path here
strPath = "C:\RodsData.xlsm" 

'Write the macro name - could try including module name
strMacro = "Update" '    "Sheet1.Macro2" 

'Create an Excel instance and set visibility of the instance
Set objApp = CreateObject("Excel.Application") 
objApp.Visible = True   '   or False 

'Open workbook; Run Macro; Save Workbook with changes; Close; Quit Excel
Set wbToRun = objApp.Workbooks.Open(strPath) 
objApp.Run strMacro     '   wbToRun.Name & "!" & strMacro 
wbToRun.Save 
wbToRun.Close 
objApp.Quit 

'Leaves an onscreen message!
MsgBox strPath & " " & strMacro & " macro and .vbs successfully completed!",         vbInformation 
'

`

  1. [アクション]タブ(タスクスケジューラ)

プログラム/スクリプトの設定:= C:\ Windows\System32\cscript.exe

引数の追加(オプション):= C:\ MyVbsFile.vbs

  1. 最後に、「ユーザーがログオンしているかどうかに関係なく実行する」をオンにしないでください

うまくいくはずです。

お知らせ下さい!

ロッド・ボウエン

4
Rod Bowen

-> ここ からコピーした以下のコード

まず、ワークブックをマクロ対応ワークブックとして保存する必要があります。したがって、xlsmではなくxlsxである必要があります。そうしないと、マクロが有効になっていないため、Excelでマクロが無効になります。

Vbscript(C:\ Excel\tester.vbs)を設定します。サンプルサブ「test()」は、Excelドキュメントのモジュールに配置する必要があります。

dim eApp
set eApp = GetObject("C:\Excel\tester.xlsm")
eApp.Application.Run "tester.xlsm!test"
set eApp = nothing

次に、スケジュールを設定し、オフラインアクセス用の名前とユーザー名/パスワードを付けます。

次に、アクションとトリガーを設定する必要があります。

スケジュールを設定します(トリガー)

Set your trigger

アクション、vbscriptをCscript.exeで開くように設定し、バックグラウンドで実行されるようにし、vbcriptが有効にしたエラー処理によってハングアップしないようにします。

Action Properties

3
Rich

私ははるかに簡単な方法を見つけました、そして、それがあなたのために働くことを望みます。 (Windows 10およびExcel 2016を使用)

新しいモジュールを作成し、次のコードを入力します。Sub auto_open() '実行するマクロ(このモジュール内にある必要はありません。このワークブック内にあるだけですEnd Sub

タスクスケジューラを使用してタスクを設定し、「実行するプログラム」Excelを設定します(C:\ Program Files(x86)\ Microsoft Office\root\Office16にあります)。次に、「引数の追加(オプション):マクロが有効なワークブックへのファイルパスとして設定します。Excelへのパスとワークブックへのパスの両方を二重引用符で囲む必要があることに注意してください。

* Windowsスケジューラ画面の画像については、コミュニティが編集したRichの例を参照してください。

1
Justin