2016-06-25 1 views
0

인터넷에서 일부 정보를 다운로드하는 매크로가 있으며 특정 시간에 시작하여 때때로 특정 시간에 설정 시간 간격으로 반복적으로 실행되도록 예약해야합니다 매크로로 출력.타이머에서 vbscript를 통해 매크로를 자동으로 실행합니다.

저는 두 가지 방법으로 문제에 접근했습니다. 둘 다 알아 내지 못하는 문제를 나타 냈습니다. 첫 번째 방법은 매크로로 업데이트되는 통합 문서의 셀에서 파생 된 런타임으로 Application.OnTime 명령을 사용하여 매크로를 실행하는 타이머 하위를 사용하는 것입니다.

이 방법은 컴퓨터에서 다른 일을하는 경우 잘 작동합니다. 그러나 컴퓨터를 잠자 지 않는 경우에도 30 분 정도 지나면 필연적으로 프로그램이 다시 실행되지 않습니다. 때로는 컴퓨터에서 실행 중일 때도 다시 실행되지 않습니다. 왜 이런거야? 무엇이 이것을 일으킬 수 있습니까? 또한 자연스럽게 프로그램에서 매크로를 열어 자동으로 실행하도록 예약 할 수 없으므로 솔루션의이 부분에 대한 VBScript & 작업 스케줄러 메서드를 사용했습니다.

그러나 VBScript 실행과 관련하여 두 가지 문제가 발생했습니다. 첫째, 작업 스케줄러에서 실행할 때 시작되지 않는 경우가 종종 있습니다. 둘째, 실행될 때 매크로 내의 Application.OnTime 명령이 작동하지 않습니다. 매크로가 반복을 통해 실행될 때 하루 중에 결정되는 불규칙한 시간 간격으로 매크로를 실행해야하기 때문에 문제가됩니다. 작업 관리자가 시도 할 때 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 
+0

VBA 및 VBScript 부분의 코드를 입력하십시오. 그것이 지금 진술 된 것처럼, 대답으로 제공 될 수있는 것이 많지 않습니다. – trincot

답변

0

다른 방식으로 사용해도 될까요? 1) Windows 스케줄러에서 vbscript를 실행하면 1 분 또는 1 시간마다 또는 ...이라고 표시됩니다. 조건은 다음 코드 를 실행하면

2)

는 VBScript를
내부에 약간의 검증을 넣어 그렇지 정지 VBScript를 끝 사용

경우 당신은 아마 OnTime 이벤트 핸들러를 제거 할 수 있습니다이

감사합니다 알렉스

+0

감사합니다. 나는 현재 작업 스케줄러에 매 5 분마다 실행되도록 설정했다. 더 자주 실행하고 싶지는 않지만 때때로 5 분 간격으로 실행할 필요가 있습니다 (예 : 8:52 및 8:52). 통합 문서에서 vba 대신 vbscript로 런타임을 그릴 수 있는지 궁금합니다. 그러나 나는 그것이 작동하게하는 방법을 이해할 수 없다. 유효성 검사와 관련하여 유효성을 검사 할 항목이 없습니다. 나는 프로그램이 매 5 분마다 실행되기를 원하지만 때로는 중간에 실행되기를 원한다. – Dorian821

+0

@ Dorian821에서 이벤트 및 타이머 (vbs를 사용하여 이벤트를 만드는 방법에 대한 stackoverflow 검색)에 의해 트리거되도록 작업 스케줄러를 수정할 수 있습니다. – Jules

+0

@ Dorian821 '유효성 확인'이라는 용어를 사용했을 때, 귀하의 조건에 따라 실행 여부를 결정했습니다. 예를 들어, 귀하의 스케줄러가 1 분마다 실행됩니다 : 8:50 - 실행 (시간별); 8시 51 분 - 실행되지; 8:52 - 뛰기 (여분 상태에 의하여); 8시 53 분 - 등 실행되지 않습니다 – Alex

0

나는 당신이 복잡한 것을 생각합니다. Workbook_Open 이벤트와 Windows 작업 스케줄러가 필요합니다.

이와 비슷한 것 (필요에 맞게 맞춤 설정)

Private Sub Workbook_Open() 
    Msgbox Date 
    Worksheets("Sheet1").Range("A1").Value = Date 
End Sub 

Windows 작업 스케줄러를 사용하여 일정을 예약하십시오.

http://www.sevenforums.com/tutorials/11949-elevated-program-shortcut-without-uac-prompt-create.html

+0

감사합니다. 네가 옳아 내가 더 간단하게 만들 수있어. 그러나 현재 코드는 정상적으로 작동하며 vba 코드가 불필요하게 실행되는 것을 방지하기 위해 유효성 검사를 선호합니다. 이 문제는 실제로 작업 스케줄러에서 찾을 수 있습니다. 스크립트는 수작업으로 훌륭하게 실행되지만 작업 스케줄러를 사용하여 일정에 따라 계속 실행하는 데 문제가 있습니다. 지금은 스크립트를 열지 않는 것 같습니다. 그것은 "Created Task Process"에서 멈추고 몇 시간 동안 그대로 남아 있습니다. 그 사이에 wscript 또는 작업 프로세스의 Excel 프로세스 추적은 없습니다 – Dorian821

+0

이것은 더 나은 해결책입니다. Ad-Hoc 실행을 원할 경우 이벤트 로그에서 실행할 태스크를 수정하십시오. vbs 모듈을 작성하여 이벤트를 작성하여 데스크탑 바로 가기에 배치 할 수 있습니다. – Jules

+0

나는 이것이 어떻게 도움이되는지 또는 단순화 하는지를 보지 못했다. 이 프로그램의 기준은 단순히 시간 기반이므로 매일 서버에서 자동으로 실행되기를 원합니다. 따라서 바탕 화면 바로 가기 및 이벤트 로그를 사용하여 다른 프로그램을 설정하는 것이 시간 기반 일정보다 효과적 일 수 있습니까? – Dorian821

관련 문제