インターネットから情報をダウンロードするマクロがあり、特定の時刻に開始され、設定された時間間隔で自動的に実行されるようにスケジュールする必要がありますマクロによって出力されます。タイマーからvbscript経由でマクロを自動的に実行
私は2つの方法で問題にアプローチしましたが、どちらも問題を明らかにしていません。最初の方法は、マクロによって更新されたブック内のセルから派生したランタイムでApplication.OnTimeコマンドを使用してマクロを実行するタイマーサブを使用することです。
私がコンピュータに何か他のことをしている場合、この方法はうまくいきます。しかし、私が去ると、たとえコンピュータがスリープ状態にならなくても、プログラムは30分後に再起動することが必然的に中止されることに気づいた。時々、私はコンピュータ上でアクティブであっても再実行を停止します。どうしてこれなの?これを引き起こす原因は何ですか?また、当然ながら、マクロ内から自動的にプログラムを開いて実行するようにスケジュールすることはできませんので、ソリューションのこの部分についてはVBScript &タスクスケジューラメソッドを参照しました。
しかし、私はVBScriptの実行に2つの問題がありました。まず、タスクスケジューラで実行すると起動が失敗することがよくあります。次に、実行されると、マクロ内のApplication.OnTimeコマンドが機能しません。これは、マクロが繰り返し実行されるときに、1日のコース中に決定される不規則な時間間隔でマクロを実行する必要があるため、問題です。タスクマネージャが試行したときにvbscriptが実行されないのはなぜですか?また、手動で実行するときにマクロが行うようにapplication.ontimeコマンドを起動しないのはなぜですか?
VBAタイマーコード:
Sub Timer()
Dim Runtime As Date
If Time <= TimeValue("17:45:00") Then
Workbooks("10am_Swing_Report").Sheets("Parameters").Cells(17, 2).Value = 10
ElseIf Time > TimeValue("17:45:00") And Time <= TimeValue("18:15:00") Then
Workbooks("10am_Swing_Report").Sheets("Parameters").Cells(17, 2).Value = 13
ElseIf Time > TimeValue("18:15:00") And Time <= TimeValue("18:45:00") Then
Workbooks("10am_Swing_Report").Sheets("Parameters").Cells(17, 2).Value = 16
ElseIf Time > TimeValue("18:45:00") And Time <= TimeValue("19:15:00") Then
Workbooks("10am_Swing_Report").Sheets("Parameters").Cells(17, 2).Value = 19
End If
Workbooks("10am_Swing_Report").Sheets("Parameters").Range("B16").Calculate
If Time > Workbooks("10am_Swing_Report").Sheets("Parameters").Range("B16").Value Then
Runtime = Time + TimeValue("00:00:30")
Else
Runtime = Workbooks("10am_Swing_Report").Sheets("Parameters").Range("B16").Value
End If
Application.OnTime TimeValue(Runtime), "Swingtimer"
Workbooks("10am_Swing_Report").Sheets("Parameters").Range("C16").Value = Runtime
Workbooks("10am_Swing_Report").Save
End Sub
ありがとう!
ランタイムが渡されたという検証を含むようにVbsコードを更新しましたが、まだタスクスケジューラがタスクを開始できないという問題が発生しています。次のエラーが表示されます。「起動要求は無視されました。インスタンスはすでに実行中です。」続いて「タスクが失敗しました」。私はもともと、Vbscriptが以前のインスタンスからまだ実行されていたためだと考えていましたが、私はこれを最初から取得しています。
Option Explicit
Dim xlApp
Dim xlBook
Dim runtime
Dim xlSheet
Set xlApp = CreateObject("Excel.Application")
xlApp.DisplayAlerts = False
'xlApp.Application.DisplayAlerts = True
Set xlBook = xlApp.Workbooks.Open("C:\Users\DORIAN\Dropbox\Swing_Report.xlsm",1,False)
Set xlSheet = xlBook.Sheets("Parameters")
'xlBook.application.Visible = True
'MsgBox FormatDateTime(xlSheet.Range("B16").Value,3)
runtime = TimeValue(FormatDateTime(xlSheet.Range("B16").Value,3))
'MsgBox runtime
If Time > runtime Then
xlApp.Run "Swingtimer"
'MsgBox "Running..."
WScript.Sleep 30000
Else
xlApp.Application.OnTime runtime, "Swingtimer"
'MsgBox "Timer Set"
End If
xlbook.close True
WScript.Quit
VBAとVBScriptの両方のコードを入力してください。それが今述べられているように、答えとして提供できるものはあまりありません。 – trincot