2015-09-25 41 views
1

我一直在研究这个VBA代码很长一段时间。目标是从我的Excel文档中复制一些内容,在线搜索它,然后从HTML代码中取回某些内容。我不断收到一个错误代码,指出“Object Required”,有时它会显示“Object variable or With block variable not set。”。这是所有的重点放在行“set elementTWO = elementONE.Item(i).innerText我很困惑这个对象需要错误VBA

我试过删除单词”设置“我试图改变elementTWO到一个字符串。 。接下来循环不会让我做“出境”。它返回一个错误。我已经尝试了一些其他的事情都无济于事。任何帮助是极大的赞赏

Option Explicit 
Option Compare Text 

Public Enum READYSTATE 
    READYSTATE_UNINITIALIZED = 0 
    READYSTATE_LOADING = 1 
    READYSTATE_LOADED = 2 
    READYSTATE_INTERACTIVE = 3 
    READYSTATE_COMPLETE = 4 
End Enum 

Sub GetCategory() 

Dim RowNo, ColNo, i As Integer 
Dim Parent, Item, URL1, URL2, URL3 As String 
Dim objHTML As Object 
Dim elementONE As Object 
Dim elementTWO As String 


RowNo = 3 
ColNo = 5 

URL1 = "http://www.infores.com/public/us/knowledgegroup/resources/resources.pli?defaultDataType=&pageid=validatorresults&upc1=" 
URL2 = "&upc2=" 
URL3 = "&submitupc=find+it%21" 

Dim ie As Object 
Set ie = CreateObject("InternetExplorer.Application") 


    With Worksheets(1) 
    While RowNo <= 5 
     Parent = Cells(RowNo, ColNo) 
     Item = Cells(RowNo, ColNo + 1) 

     With ie 
      .navigate URL1 & Parent & URL2 & Item & URL3 
      .Visible = False 

     'Delay while IE loads 
     Do While (ie.Busy Or ie.READYSTATE <> READYSTATE.READYSTATE_COMPLETE) 
      DoEvents 
     Loop 

      'Put html code in document object 
      Set objHTML = .document 
      DoEvents 
     End With 


     Set elementONE = objHTML.getElementsByTagName("TD") 'Break Down HTML code 

      For i = 1 To elementONE.Length 
       elementTWO = elementONE.Item(i).innerText 
       If elementTWO = "Description" Then    'Find the Category 
        Cells(RowNo, ColNo + 4) = elementONE.Item(i + 1).innerText 'Put Category into excel 
       End If 
       Next i 


      DoEvents 
      ie.Quit 
      RowNo = RowNo + 1 
    Wend 

End With 
End Sub 
+0

声明所有变量:'D IM objHTML,elementONE,elementTWO作为Object' 变暗的第一至变种,然后elementTwo作为和对象,这很可能不是你想要的。 – user1336827

+0

对不起,我不完全确定你的意思。我试图单独声明所有的变量,但我得到了相同的结果。 – Sam

+1

elementONE.Item(i).innerText的类型是什么?它是一个对象吗?它看起来好像是一个字符串。看起来好像你想Dim elementTWO为String,因为你将它与下一行的字符串进行比较。 – user1336827

回答

0

这个我觉得是你想要的,它会处理循环,但在此期间失败,您可以至少调试一下,看看为什么:

Option Explicit 
Option Compare Text 

Public Enum READYSTATE 
    READYSTATE_UNINITIALIZED = 0 
    READYSTATE_LOADING = 1 
    READYSTATE_LOADED = 2 
    READYSTATE_INTERACTIVE = 3 
    READYSTATE_COMPLETE = 4 
End Enum 

Sub GetCategory() 

Dim RowNo, ColNo, i As Integer 
Dim Parent, Item, URL1, URL2, URL3 As String 
Dim objHTML As Object, elementONE As Object, elementTWO As String 


RowNo = 3 
ColNo = 5 

URL1 = "http://www.infores.com/public/us/knowledgegroup/resources/resources.pli?defaultDataType=&pageid=validatorresults&upc1=" 
URL2 = "&upc2=" 
URL3 = "&submitupc=find+it%21" 

Dim ie As Object 
'Set ie = CreateObject("InternetExplorer.Application") 


With Worksheets(1) 
    While RowNo <= 5 
     Parent = Cells(RowNo, ColNo) 
     Item = Cells(RowNo, ColNo + 1) 

     Set ie = CreateObject("InternetExplorer.Application") 

     With ie 
      .navigate URL1 & Parent & URL2 & Item & URL3 
      .Visible = False 

     'Delay while IE loads 
     Do While (ie.Busy Or ie.READYSTATE <> READYSTATE.READYSTATE_COMPLETE) 
      DoEvents 
     Loop 

      'Put html code in document object 
      Set objHTML = .document 
      DoEvents 
     End With 


     Set elementONE = objHTML.getElementsByTagName("TD") 'Break Down HTML code 

      For i = 0 To elementONE.Length - 1 
       elementTWO = elementONE(i).innerText 
       If elementTWO = "Description" Then    'Find the Category 
        Cells(RowNo, ColNo + 4) = elementONE(i + 1).innerText 'Put Category into excel 
       End If 
      Next i 


      DoEvents 
      ie.Quit 
      RowNo = RowNo + 1 
    Wend 

End With 
End Sub 
+0

我只能得到它返回第一类。所以,如果这就是你的意思,那就是工作。这是我的第一个程序,但我对调试并不了解太多。我如何根据需要多次执行此操作?我遇到的错误是“对象变量或块变量未设置” – Sam

+0

我真的需要一些帮助。你认为你可以再看一遍吗?我已经盯着这个程序16个小时,并且无法超越这个错误。我非常感谢迄今为止的努力,但我仍然坚持! – Sam

+0

的一个问题是该阵列会超出范围:更新:对于i = 0到elementONE.Length - 1,那么至少一部分被截取的卡。当我运行此我得到这个页面:http://www.infores.com/public/us/knowledgegroup/resources/resources.pli?defaultDataType=&pageid=validatorresults&upc1=&upc2=&submitupc=find+it%21 这基本上是没有搜索结果找到页面。没有“描述”可以找到。也许在你的这将解决你的问题,因为你有实际的工作表。 – user1336827