2016-07-06 2 views
1

У меня есть два субтитров. Первый sub (GetKeyWord) запрашивает у пользователя ключевые слова и сохраняет их в массиве строк. Следующий sub (AlertFinder) принимает конкретный массив строк и ищет его на веб-странице. Тем не менее, я хочу, чтобы AlertFinder запускал каждые x минут, но я не хочу, чтобы у пользователя спрашивали, какие ключевые слова он/она ищет каждый раз, когда запускается AlertFinder (нужно только спросить пользователя один раз в начале и иметь строку после этого остался постоянный массив). Вот почему я сделал GetKeyWord отдельным подразделением, но теперь у меня проблемы с запуском AlertFinder, поскольку он запускает строковый массив из GetKeyWord для запуска.VBA Передача переменной к повторяющейся Sub

Вот код:

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 

Проблема возникает, когда я пытаюсь вызвать AlertFinder (strTemp) внутри самой AlertFinder, но strTemp приходит от GetKeyWord, который я хочу оставаться постоянным и не должны работать GetKeyWord каждый 5 минут. Любая помощь будет оценена!

+0

Трудно сказать, не видя «~ пучок кода ~», но вы, вероятно, должны извлечь цикл из «Sub AlertFinder» в свой собственный «Sub» вместо использования рекурсии. – Comintern

+0

спасибо! не возражаете ли вы разработать? –

+0

Петля поддерживает сценарий. Нет причин снова называть 'AlertFinder (strTemp)'. Случается, что каждые 5 минут вы создаете другую копию AlertFinder. Через 5 минут у вас есть 2 копии AlertFinder, через 10 минут - 4 копии, за 15 минут - 16 копий .... и т. Д. –

ответ

0

Спасибо тем, кто прокомментировал. То, что я закончил, было объявлением strTemp как переменной Public, поэтому ему можно было получить значение в GetKeyword и передать AlertFinder, в то время как AlertFinder также мог бы вызвать себя (затем удалили все экземпляры strTemp(), объявленные в подмножестве GetKeyword). Работал отлично.

Public strTemp() как вариант

перед всеми subprocedures сделал трюк. Надеюсь, это поможет кому-то еще с той же проблемой.

Смежные вопросы