MS Access Loop 更新停留在第一条记录上的网页
MS Access Loop to update Web Pages stuck on first record
Access 2016:代码有效,非常棒!但是它只循环第一条记录。我花了 2 天 moving/adding 循环代码但没有成功。
当我让它工作时:Browser = False。我打算添加一个计数器来查看更新过程。
另外,如果 eBay 的服务器不能足够快地处理数据,我可能需要添加一个循环暂停?
代码:(我漏掉了几行...但主要代码很好)
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
我在这里检查了你的代码,它看起来应该毫无问题地循环遍历 rst
RecordSet 变量。我什至创建了一个新的数据库应用程序,创建了一个名为 "Inventory" 的 table 并给它一个名为“[Item ID]”的字段,然后将上面的代码剪切并粘贴到按钮的点击事件中一个表格,我似乎能够 运行 通过整个 Do Until .EOF
循环没有问题!?!
然而,这里显然没有提供完整的代码来测试它,因为上面的代码没有显示 rst
记录集变量中每个单独的 [Item ID]
记录发生了什么。此外,IE 的 Navigate URL 丢失了,因此当我测试这段代码时,我不确定我是否在做与您完全相同的事情。但是,根据我在 Access 中的测试,当您在整个 Do Until .EOF
循环的底部调用 rst.MoveNext
时,它确实会循环遍历 Inventory table 中的所有记录。因此,在没有更多信息或完整代码的情况下,我想到了几件事:
是否有可能是您在此处某处的代码中遇到错误导致此代码中断整个 Do Until
循环 and/or 子?例如,如果您调用了 SetWarnings = false
(在之前的子偶数中)并且遇到错误,您将不会在此处看到错误消息并且代码将静默失败,因为警告已关闭。
否则,我怀疑导致问题的原因是此处未提供的缺失代码。您始终可以创建一个新的子程序,并一次剪切和粘贴代码位,以准确找出此错误实际发生的位置。如果您不想在此处提供完整代码,那将是我的下一步。
无论如何,我希望这一切都有意义并且对你有所帮助。但是,如果您对这个答案有任何疑问,请随时给我留言或在这里发表评论,我会尽力提供帮助!
Access 2016:代码有效,非常棒!但是它只循环第一条记录。我花了 2 天 moving/adding 循环代码但没有成功。
当我让它工作时:Browser = False。我打算添加一个计数器来查看更新过程。
另外,如果 eBay 的服务器不能足够快地处理数据,我可能需要添加一个循环暂停?
代码:(我漏掉了几行...但主要代码很好)
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
我在这里检查了你的代码,它看起来应该毫无问题地循环遍历 rst
RecordSet 变量。我什至创建了一个新的数据库应用程序,创建了一个名为 "Inventory" 的 table 并给它一个名为“[Item ID]”的字段,然后将上面的代码剪切并粘贴到按钮的点击事件中一个表格,我似乎能够 运行 通过整个 Do Until .EOF
循环没有问题!?!
然而,这里显然没有提供完整的代码来测试它,因为上面的代码没有显示 rst
记录集变量中每个单独的 [Item ID]
记录发生了什么。此外,IE 的 Navigate URL 丢失了,因此当我测试这段代码时,我不确定我是否在做与您完全相同的事情。但是,根据我在 Access 中的测试,当您在整个 Do Until .EOF
循环的底部调用 rst.MoveNext
时,它确实会循环遍历 Inventory table 中的所有记录。因此,在没有更多信息或完整代码的情况下,我想到了几件事:
是否有可能是您在此处某处的代码中遇到错误导致此代码中断整个
Do Until
循环 and/or 子?例如,如果您调用了SetWarnings = false
(在之前的子偶数中)并且遇到错误,您将不会在此处看到错误消息并且代码将静默失败,因为警告已关闭。否则,我怀疑导致问题的原因是此处未提供的缺失代码。您始终可以创建一个新的子程序,并一次剪切和粘贴代码位,以准确找出此错误实际发生的位置。如果您不想在此处提供完整代码,那将是我的下一步。
无论如何,我希望这一切都有意义并且对你有所帮助。但是,如果您对这个答案有任何疑问,请随时给我留言或在这里发表评论,我会尽力提供帮助!