2013-05-23 2 views
1

그리드에서 레코드를 삭제하기 위해이 코드를 QTP에서 실행하려고합니다. 이 코드행이 삭제되면 Forloop의 rowcount가 업데이트되지 않습니다.

dgRows = SwfWindow("PWC - [PWC]").SwfWindow("Region Master").SwfTable("dgMaster").RowCount 
For i = 1 To dgRows 

SwfWindow("PWC - [PWC]").SwfWindow("Region Master").SwfTable("dgMaster").SelectCell i-1,0 
'row of data grid begins with 0, hence i -1 
SwfWindow("PWC - [PWC]").SwfWindow("Region Master").SwfButton("DELETE").Click 
Swfwindow("PWC - [PWC]").SwfWindow("Region Master").SwfWindow("RegionMaster").SwfButton("Insert").Click 
    deleteCode = closePrompt() 

If deleteCode = 15 Then 'closePrompt returns 15 when record is successfully deleted 
    i = i - 1   'As record is deleted, grid has lost one record and for loop will exit early by one record or throw error. 
dgoRows = SwfWindow("PWC - [PWC]").SwfWindow("Region Master").SwfTable("dgMaster").RowCount 
End If 
Next 

이 코드는 1에서부터 행 수 (dgRows)까지 실행됩니다.

3 개의 행이있는 경우 가능하면 3 번 실행하고 레코드를 삭제합니다. 1 레코드가 삭제되면 표가 손실됩니다. 그러므로 나는 코드에 의해 i와 dgRows의 값을 조정하려고

I = I - 레코드가 삭제 될 때, 그리드는 하나 개의 레코드와 하나 개의 레코드에 의해 조기 종료 또는 오류가 발생합니다 루프 을 잃은 1 ' . dgoRows = SwfWindow ("PWC - [PWC]") SwfWindow ("지역 마스터") SwfTable ("dgMaster")의 RowCount

QTP가에 대한 행을 클릭하지 않도록 dgRows의 새 값을 업데이트

'... 이 아닌 i의 값이 있습니다. .. SwfWindow ("지역 마스터") SwfTable (-

는 내가 코드

dgRows = SwfWindow ("[PWC] PWC")의 조각으로 직면하고있는 문제를 설명하기 위해 시도 "dgMaster") RowCount

행을 삭제 한 후에 for 루프가 반복 될 때 동적으로 그리드의 행을 가져 오지 않습니다. 따라서 i 값은 3 행과 같아 지지만 사실 그리드에는 2 레코드가 삭제되어 하나의 행이 있으므로 QTP는 값 3 인 셀을 클릭하려고 시도하지만이를 찾지 못하고 오류가 발생합니다.

누구나 왜 ("dgMaster")가 아닌지 말할 수 있습니까? RowCount 자체 업데이트 또는 for 루프가 다음에 실행될 때 업데이트하는 방법은 무엇입니까?

+0

행을 삭제할 때 실제로 단계 -1을 사용하여 마지막 요소에서 첫 번째 요소까지 반복합니다. –

+0

@ mehow thanks mehow – user2181576

답변

0

VBScript에서 for 루프는 한 번만 한도를 계산합니다.

증명 :

limit = 4 
For i = 1 to limit 
    limit = limit - 1 
    document.write(i & " - " & limit & "<br>") 
Next 

출력은 :

1-3
2-2
3-1
4-0

당신은 While를 사용한다 대신 루프

dgRows = SwfWindow("PWC - [PWC]").SwfWindow("Region Master").SwfTable("dgMaster").RowCount 
i = 1 ' I would use 0 but I'm keeping the code as close to original as possible 
While i <= dgRows 
    i = i + 1 
    SwfWindow("PWC - [PWC]").SwfWindow("Region Master").SwfTable("dgMaster").SelectCell i-1,0 
    'row of data grid begins with 0, hence i -1 
    SwfWindow("PWC - [PWC]").SwfWindow("Region Master").SwfButton("DELETE").Click 
    Swfwindow("PWC - [PWC]").SwfWindow("Region Master").SwfWindow("RegionMaster").SwfButton("Insert").Click 
    deleteCode = closePrompt() 

    If deleteCode = 15 Then 'closePrompt returns 15 when record is successfully deleted 
     i = i - 1   'As record is deleted, grid has lost one record and for loop will exit early by one record or throw error. 
     dgoRows = SwfWindow("PWC - [PWC]").SwfWindow("Region Master").SwfTable("dgMaster").RowCount 
    End If 
WEnd 
+0

고마워! 이것은 매력처럼 작동했습니다 ... – user2181576

+0

@ user2181576 내 기쁨, 나는 실제로 이것을 몰랐고 귀하의 질문에 감사드립니다 그래서 고마워요! – Motti

관련 문제