excel vba getelementsbyid无法让它发挥作用

时间:2015-01-04 18:20:45

标签: excel-vba getelementbyid vba excel

我是对象的新手,除了htm.getelementsbyid之外我完成了所有这些工作。当我到达rows.length时,我收到错误:

  

运行时错误91,未设置对象变量

Sub get_correct_address()

    Dim x As Long, y As Long
    Dim htm As Object

    Set htm = CreateObject("htmlFile")
    row = 6
    StrNumCol = 4
    StrNamCol = 5
    StrTypCol = 6
    CityCol = 7
    ZipCol = 3
    StateCol = 8
    With CreateObject("msxml2.xmlhttp")
        .Open "GET", "http://production.shippingapis.com/ShippingAPITest.dll?API=Verify&XML=          <AddressValidateRequest%20USERID=""968APPRA1046"">" & _
                    "<Address>" & _
                        "<Address1></Address1>" & _
                        "<Address2>" & CStr(Sheets("import").Cells(row, StrNumCol).value) + " " +    Sheets("import").Cells(row, StrNamCol).value + " " + Sheets("import").Cells(row, StrTypCol).value & "</Address2>" & _
                        "<City>" & CStr(Sheets("import").Cells(row, CityCol).value) & "</City>" & _
                        "<State>" & CStr(Sheets("import").Cells(row, StateCol).value) & "</State>" & _
                        "<Zip5></Zip5>" & _
                        "<Zip4>" & CStr(Sheets("import").Cells(row, ZipCol).value) & "</Zip4>" & _
                        "</Address>" & _
                    "</AddressValidateRequest>" & _
                    """, False"
        .send
        htm.body.innerhtml = .responsetext
    End With

    With htm.getelementbyid("comps-results")
       For x = 0 To .Rows.length - 1
           For y = 0 To .Rows(x).Cells.length - 1
               Sheets(1).Cells(x + 1, y + 1).value = .Rows(x).Cells(y).innertext
           Next y
       Next x
    End With

    'http://production.shippingapis.com/ShippingAPITest.dll?API=Verify&XML=<AddressValidateRequest%20USERID="xxxxxxxxxxxx">
End Sub

1 个答案:

答案 0 :(得分:1)

我似乎无法在代码中的地址处打开对象(它必须受到保护)。也就是说,最可能的问题是htm.getelementbyid(&#34; comps-results&#34;)什么都没有返回。验证值并尝试使用F8逐步执行代码并验证.Rows.Length是否有值。如果没有,问题可能在于您正在引用的元素(&#34; comps-result&#34;)。还要验证.Rows.Length是你想要的。也许你想要Rows.Count?

With htm.getelementbyid("comps-results")
   For x = 0 To .Rows.Count - 1
       For y = 0 To .Rows(x).Cells.Count - 1
           Sheets(1).Cells(x + 1, y + 1).Value = .Rows(x).Cells(y).innertext
       Next y
   Next x
End With