2014-04-23 3 views
0

Я написал эту функцию ниже. Тем не менее, я продолжаю получать недопустимый аргумент функции в QTP. Объект - это ссылка в веб-таблице, и я продолжаю получать это сообщение об ошибке «Оператор содержит один или несколько недопустимых функций». Может кто-нибудь мне помочь?Оператор содержит один или несколько недопустимых аргументов функции в QTP

Function CheckData(Value_To_Match, Rpttext, ByRef Row_Num) 
    Dim tab_val, arr_val(2), rowNum 
    tab_val = Split(Value_To_Match,";") 
    arr_val(0) = Browser("xyz").Page("abc").WebTable("xsw").getColumnIndex(tab_val(0)) 
    If UBound(tab_val) > 0 Then 
    arr_val(1) = tab_val(1) 
    arr_val(2) = Browser("xyz").Page("abc").WebTable("xsw").getMatchingRow(arr_val) 
    Row_Num = arr_val(2) 
    Browser("xyz").Page("abc").WebTable("xsw").MatchVal arr_val, Rpttext, "Verify" 
    Else 
    arr_val(1) = tab_val(0) 
    arr_val(2) = Browser("xyz").Page("abc").WebTable("xsw").getMatchingRow(arr_val) 
    Browser("xyz").Page("abc").WebTable("xsw").MatchVal arr_val, Rpttext, "Verify" 
    arr_val(2) = Row_Num 
    Browser("xyz").Page("abc").WebTable("xsw").MatchVal arr_val, Rpttext, "Check" 
    End If 
End Function 

If Trim(Parameter("DraftsViewDraftIcon")) <> "" And _ 
    LCase(Trim(Parameter("DraftsViewDraftIcon"))) <> "[null]" And _ 
    LCase(Trim(Parameter("Wrapper_Mode"))) ="set" Then 

    Set ViewDraftLink = Browser("xyz").Page("abc").WebTable("xsw").ChildItem(Row_Num, 4, "Link", 0) 
    ViewDraftLink.click 
End If 

Эта функция ниже для получения соответствующей строки

Public Function getMatchingRow(byRef object, byVal arraydata) 
    Dim introw 
    Dim varComp 
    On Error Resume Next 
    If UBound(arraydata) = 0 Then 
    Reporter.ReportEvent micFail, "Array Data", "No Data found in input parameter Array" 
    getMatchingRow = 0 
    Exit Function 
    End If 

    For introw = 1 to object.RowCount 
    varComp = StrComp(Trim(object.GetCellData(introw, arrayData(0))), Trim(arrayData(1)), 0) 
    If varComp = 0 And Not(isNull(varComp)) Then 
     getMatchingRow = introw 
     Exit Function 
    End If 
    Next 
    getMatchingRow = 0 
    On Error Goto 0 
+0

Можете ли вы пройдите через код и сообщите нам, в какой строке это происходит? Кроме того, код getMatchingRow представляется неполным - включите его вместе с любыми операторами RegisterUserFunc. – Xiaofu

+0

Я получаю erroe в этой строке кода «Set ViewDraftLink = Browser (« xyz »). Страница (« abc »). WebTable (« xsw »). ChildItem (Row_Num, 4,« Link », 0) ViewDraftLink .click Конец Если – user3562506

+0

у меня есть, что в операторах RegisterUserFunc уже есть код ниже, который я написал для этого. Спасибо! – user3562506

ответ

0

Если вы хотите зарегистрировать функцию getMatchingRow в качестве метода, первый формальный аргумент должен быть byVal параметр:

Public Function getMatchingRow(byVal object, byVal arraydata) 

Вы используете аргумент byRef:

Public Function getMatchingRow(byRef object, byVal arraydata) 

Это может вызвать проблемы, с которыми вы столкнулись.

У меня нет возможности проверить это прямо сейчас, но, пожалуйста, попробуйте в любом случае.

(у меня есть некоторые сомнения по поводу этого ответа у меня, особенно потому, что вы говорите, что линия ошибка является Set ViewDraftLink назначением, в то время как это должно происходить на .getMatchingRow вызова. Но вы также упомянуть ViewDraftLink.Click и End If строк в этом комментарии, так вы в настоящее время unprecise в этой связи в любом случае.

Это действительно помогло бы, если объединить все эти данные в вопрос, дополнительно очистить код в вопросе, и удалите тогда устаревшие комментарии.)

+0

hi TheBlastone, я пробовал и менял функцию на объект byVal, однако на итерации 1 он нажимает на ссылку, но в итерации 2 появляется сообщение об ошибке с недопустимым аргументом функции .. Параметр одинаковый для обеих итераций и а также объект и его свойство. – user3562506

+0

У этого может быть миллион причин. Если вы не дадите мне знать, в какую строку кода ссылается сообщение об ошибке, я не буду пытаться угадать;), и я также задаюсь вопросом, что произойдет, если вы удалите ошибку on goto nexto, которую я не вижу в использовании для здесь и особенно прямо сейчас, это просто может скрыть то, что действительно идет не так ...? И подумайте еще раз о том, чтобы очистить вопрос, поэтому его SSCCE (один из «С» означает «полный», я думаю). – TheBlastOne

+0

После отладки несколько раз ..я пришел, чтобы узнать после 2-й итерации «Row_num», которую я передаю в выражении «Set ViewDraftLink», изменяется от массива до целого ... любое предложение? – user3562506

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