xlsx
マクロ対応ファイルがあります。毎日午前9時にタスクマネージャーがブックを開き、マクロを起動し、ブックを閉じるように、タスクマネージャーで設定するにはどうすればよいですか。
これまで私は使用しています
Application.OnTime . . .
しかし、xlsmファイルを開いたままにしておくのは不便であることを認識しています
あなたが示したように vbs を使用する方が良い
vbs
を作成します。これは、。vbs拡張子を持つテキストファイルです(以下のサンプルコードを参照)vbs
を実行します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
これを行ってくれた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"
つの重要な手順-Excel.xls(m)ファイルをタスクスケジュールする方法
単純に:
詳細...
`
' 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
'
`
プログラム/スクリプトの設定:= C:\ Windows\System32\cscript.exe
引数の追加(オプション):= C:\ MyVbsFile.vbs
うまくいくはずです。
お知らせ下さい!
ロッド・ボウエン
-> ここ からコピーした以下のコード
まず、ワークブックをマクロ対応ワークブックとして保存する必要があります。したがって、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
次に、スケジュールを設定し、オフラインアクセス用の名前とユーザー名/パスワードを付けます。
次に、アクションとトリガーを設定する必要があります。
スケジュールを設定します(トリガー)
アクション、vbscriptをCscript.exeで開くように設定し、バックグラウンドで実行されるようにし、vbcriptが有効にしたエラー処理によってハングアップしないようにします。
私ははるかに簡単な方法を見つけました、そして、それがあなたのために働くことを望みます。 (Windows 10およびExcel 2016を使用)
新しいモジュールを作成し、次のコードを入力します。Sub auto_open() '実行するマクロ(このモジュール内にある必要はありません。このワークブック内にあるだけですEnd Sub
タスクスケジューラを使用してタスクを設定し、「実行するプログラム」Excelを設定します(C:\ Program Files(x86)\ Microsoft Office\root\Office16にあります)。次に、「引数の追加(オプション):マクロが有効なワークブックへのファイルパスとして設定します。Excelへのパスとワークブックへのパスの両方を二重引用符で囲む必要があることに注意してください。
* Windowsスケジューラ画面の画像については、コミュニティが編集したRichの例を参照してください。