2016-07-06 2 views
1

두 개의 하위가 있습니다. 첫 번째 하위 항목 (GetKeyWord)은 사용자에게 키워드를 묻고 문자열 배열에 저장합니다. 다음 하위 (AlertFinder)는 특정 문자열 배열을 받아서 웹 페이지에서 검색합니다. 그러나 AlertFinder가 매 x 분마다 실행되기를 원하지만, AlertFinder가 실행될 때마다 찾고있는 키워드를 묻는 메시지를 사용자에게 표시하지 않으려합니다 (처음에는 한 번만 사용자에게 질문하고 문자열을 원합니다. 배열은 그 이후에 일정하게 유지됩니다). 이것이 GetKeyWord를 별도의 하위로 만든 이유입니다.하지만 GetKeyWord에서 문자열 배열을 실행해야하므로 AlertFinder를 실행하는 데 문제가 있습니다. GetKeyWord마다 실행해야 내가 AlertFinder 자체 내에서 AlertFinder (strTemp)를 호출 할 경우VBA 되풀이 서브에 변수 전달

Sub GetKeyWords() 


Dim numKey As Integer 
Dim strTemp() As Variant 

'Input Keywords 

numKey = InputBox("How many keywords would you like to search for? (Integer)", "Integer Value Please") 




For k = 1 To numKey 
    ReDim Preserve strTemp(numKey - 1) 
    strTemp(k - 1) = InputBox("Please enter keyword" & k) 


Next 


'Execute Alert Finder 
Call AlertFinder(strTemp) 
End Sub 


Sub AlertFinder(strTemp() As Variant) 


'Set Variables 
Dim boolFound As Boolean 
Dim txt As String 
Dim strOutput As String 
Dim tbl As HTMLTable, tables As IHTMLElementCollection 
Dim tr As HTMLTableRow, r As Integer, i As Integer 
Dim tRows As IHTMLElementCollection 
Dim ie As InternetExplorer 
Dim strCurrent As Variant 

~bunch of code~ 

    Set ieDoc = ie.Document 

    'Loop to refresh webpage every 25 minutes 
    Do While True 

     'Pause the script for x minutes 
     Application.Wait (Now + TimeValue("00:05:00")) 

     'AFter time is up, reload page and run Alert Finder Again 
     ieDoc.Location.Reload (True) 
     AlertFinder (strTemp) 

     If Err <> 0 Then 

      Wscript.Quit 
     End If 
    Loop 

    Set ie = Nothing 
    End Sub 

의 문제점이 발생하지만, strTemp 내가 일정하게 유지하지 할 GetKeyWord에서 온다 : 여기

코드입니다 5 분. 어떤 도움을 주시면 감사하겠습니다!

+0

"~ bunch of code ~"를 보지 않고 말하기는 어렵지만 재귀를 사용하는 대신'Sub AlertFinder'에서 루프를 자신의'Sub'로 추출해야합니다. – Comintern

+0

감사합니다! 정교하게 생각해? –

+0

루프가 스크립트를 활성 상태로 유지합니다. AlertFinder (strTemp)를 다시 호출 할 이유는 없습니다. 일어나는 일은 매 5 분마다 AlertFinder의 또 다른 복사본을 만드는 것입니다. 5 분 안에 AlertFinder 실행 2 부, 10 분 안에 4 부, 15 분 안에 16 부 ... 등이 있습니다. –

답변

0

댓글을 작성한 사람들에게 감사드립니다. 필자는 결국 StrTemp를 Public 변수로 선언하여 GetKeyword에 값을 제공하고 AlertFinder로 전달할 수 있었고 AlertFinder는 GetKeyword 하위에 선언 된 strTemp()의 인스턴스를 모두 제거 할 수있었습니다. 잘 작동했습니다. 모든 하위 절차가 속임수를 썼는지 변형

이전

공공 strTemp(). 희망이 동일한 문제를 가진 다른 사람을 도와줍니다.