2017-12-12 5 views
1

액세스 2016 : 코드가 작동하고 정말 멋지다! 그러나 첫 번째 레코드에 대해서만 반복됩니다. 나는 2 일 동안 루프 코드를 추가/이동하지 않고 보냈다.첫 액세스 기록에 집착 한 웹 페이지를 업데이트하는 액세스 루프

내가 작동하게되면 : Browser = False. 업데이트 프로세스를보기 위해 카운터를 추가 할 계획입니다.

또한 이베이의 서버가 데이터를 충분히 빠르게 처리 할 수없는 경우 루프 일시 중지를 추가해야 할 수도 있습니다.

코드 : (나는 밖으로 몇 줄을 떠 났어요 ...하지만 주요 코드는 좋다) 내가 여기에 코드를 확인

Private Sub ReviseSKUAll_Click() 
Dim btnUpdate As MSHTML.HTMLInputElement 
Dim rst As DAO.Recordset 
Dim dbs As DAO.Database 
Dim strSQL As String 
Dim intI As Integer 
Dim skuNumber As Object 
Dim IE As Object 
Set dbs = CurrentDb 
'------------------------------------------------------------------------- 
------------------------------------------ 
'Begin Loop 
strSQL = "SELECT Inventory.[Item ID] FROM Inventory" 
Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset) 
'If the recordset is empty, exit. 
If rst.EOF Then Exit Sub 
intI = intI + 1 
'intI = 1 
rst.MoveLast 
rst.MoveFirst 
With rst 
Do Until .EOF 
'------------------------------------------------------------------------- 
'-------------------------------------------- 
Set IE = CreateObject("InternetExplorer.Application") 
With IE 
    .top = 0 
    .Left = 0 
    .Height = 1000 
    .Width = 1250 
    .Visible = True 
    .Navigate " "" 

Do While .Busy Or Not .ReadyState = 4: DoEvents: Loop 
Do Until .Document.ReadyState = "complete": DoEvents: Loop 

Set AllHyperlinks = IE.Document.getElementsByTagName("A") 
    For Each hyper_link In AllHyperlinks 
    If hyper_link.innerText = "editpane_skuNumber" Then 
     hyper_link.Click 
    Exit For 
    End If 
    Next 
    'eBays Page Sku info 
    '"> 


Call .Document.getElementById("editpane_skuNumber").setAttribute("value", 
(Nz([CustomLabelCombine]) & " " & (Nz("Location" & " " & [Location]) 
    & " " & (Nz("Bin" & " " & [Bin]))))) 
    Set AllHyperlinks = IE.Document.getElementsByTagName("A") 
    Set AllHyperlinks = IE.Document.getElementsByTagName("A") 
    For Each hyper_link In AllHyperlinks 
    If hyper_link.innerText = "pbtn" Then 
    hyper_link.Click 
    Exit For 
    End If 
    Next 
    End With 

    With IE.Document 
    'eBays Update Listing Button Push 
    '<input class="pbtn" type="button" value="Update listing" fn="pub"> 
    Set elems = .getElementsByTagName("input") 
    For Each e In elems 
    If (e.getAttribute("value") = "Update listing") Then 
     e.Click 

    Exit For 
    End If 
    Next e 
    IE.Quit 
Set IE = Nothing 
    'eBays Close Listing Button Push 
    '<input class="pbtn" type="button" value="Close" fn="clsRv"> 
    '---------------------------------------------------------------------- 

    'End Loop 
    rst.MoveNext 
    End With 
    Loop 
    End With 
    '---------------------------------------------------------------------- 
    End Sub 

답변

0

하고없이 rst 레코드 변수를 통해 루프를해야 것 같습니다 이슈. 나는 심지어 새 데이터베이스 응용 프로그램을 만들고 "Inventory"라는 테이블을 만들고 "[Item ID]"라는 필드를 지정한 다음 위의 코드를 잘라내어 폼의 단추에 대한 click 이벤트에 붙여 넣었습니다. 문제없이 전체 Do Until .EOF 루프를 실행할 수 있습니다!?!

그러나 위 코드는 rst 레코드 집합 변수의 각 [Item ID] 레코드에서 발생하는 상황을 나타내지 않으므로 전체 코드는 테스트를 위해 여기서는 제공되지 않았습니다. 또한 Internet Explorer 용 URL 탐색이 누락되어 있으므로이 코드를 테스트 할 때 자신이하는 것과 똑같은 일을하고 있는지 확신 할 수 없습니다. 그러나, 내 모든 테스트에서 Access에서 Do Until .EOF 루프의 맨 아래에 rst.MoveNext을 호출하면 인벤토리 테이블의 모든 레코드를 반복합니다. 그래서 자세한 내용 또는 전체 코드, 마음에 와서 몇 가지 않고 :

  1. 은 전체 휴식이 코드를 일으키는 것을 여기 어딘가에 코드에서 오류를 타격하고 그것이 가능 Do Until 루프 및/또는 하위? 예를 들어 SetWarnings = false (이전 하위 버전)을 호출하고 오류가 발생하면 여기에 오류 메시지가 표시되지 않고 경고가 꺼져있어 코드가 자동으로 실패합니다.

  2. 그렇지 않으면 문제의 원인이 무엇이든지 여기에 제공되지 않은 누락 된 코드에있는 것으로 의심됩니다. 언제든지 새 하위를 만들고 코드의 비트를 한 번에 잘라내어 붙여 넣어이 오류가 실제로 발생한 위치를 정확히 알 수 있습니다. 여기에 전체 코드를 제공하고 싶지 않으면 내 다음 단계가 될 것입니다.

어쨌든이 모든 것이 의미가 있으며 도움이 되길 바랍니다. 그러나이 답변에 대해 질문이 있으시면 언제든지 저에게 메시지를 보내거나 의견을 보내주십시오. 최선을 다해 도와 드리겠습니다.

+0

GeoffreyG, 당신은 매우 도움이되었고 나에게 내가 생각하지 못한 길을주었습니다. 나는 모든 코드를 공개적으로 제공 할 수 없다는 것을 이해하면 좋겠다. 그렇게하면 모든 eBay 목록이 손상 될 수 있기 때문이다. 고마워, Bill – EbayBill

+1

비슷한 문제가있는 사람이라면'While Me.CurrentRecord '와'Me.Recordset.MoveNext'로 루프를 만들 수 있었지만, 10 개 정도의 업데이트 된 페이지 이후 eBay 웹 페이지 오류가 발생하여 루프 간 일시 중지. 도와 주신 GeoffreyG에게 다시 한 번 감사드립니다. – EbayBill

관련 문제