如何引用回创建的浏览器实例

时间:2012-10-02 11:27:07

标签: vba vbscript

我创建了这样的浏览器,并手动导航到我需要的网页。一旦我到达我需要通过单独的宏

的页面,我打算自动拉出某些元素
Sub Test()


Set CAS = New SHDocVw.InternetExplorer                     ' create a browser
CAS.Visible = True ' make it visible

CAS.navigate "http://intraneturl"

Do Until CAS.readyState = 4
DoEvents
Loop

这很好,然后我做

Public Sub Gather

Set HTMLDoc2 = CAS.document.frames("top").document

Call Timer1

With HTMLDoc2
.getElementById("tab4").FirstChild.Click
End With

Call Timer2


Dim fir, las, add1, add2, cit, stat, zi As String

Dim First As Variant
Dim Last As Variant
Dim addr1 As Variant
Dim addr2 As Variant
Dim city As Variant
Dim Thisstate As Variant
Dim Zip As Variant

Call Timer2

Set HTMLDoc = CAS.document.frames("MainFrame").document

Call Timer2

With HTMLDoc

First = .getElementsByName("IndFirst")
Last = .getElementsByName("IndLast")
addr1 = .getElementsByName("txtAdd_Line1")
addr2 = .getElementsByName("txtAdd_Line2")
city = .getElementsByName("txtAdd_City")
Thisstate = .getElementsByName("cmb_Add_State")
Zip = .getElementsByName("txtAdd_Zip")

End With



fir = First.Value
las = Last.Value
add1 = addr1.Value
add2 = addr2.Value
cit = city.Value
stat = Thisstate.Value
zi = Zip.Value

'navigate back to start page

 With HTMLDoc2
.getElementById("tab3").FirstChild.Click
End With
End Sub

这是第一次使用,但是在第一次尝试再次运行gather()子项时,在包含类似信息的其他网页上,我得到“对象变量或未设置块变量”。关于我做错什么的任何想法?

1 个答案:

答案 0 :(得分:0)

“错误”对象变量或未设置块变量“发生在:设置HTMLDoc2 = CAS.document.frames(”top“)。文档第二次尝试运行Gather()。”

这可能是以下三件事之一:

  1. CAS不再是一个对象 要检查此项,请在该行上设置断点,在VBA编辑器中按ctr + G并在立即窗口中键入?CAS Is Nothing;结果应该是假的;如果它是真正的CAS不再是对象

  2. 与Daniel Dusek建议的一样,确保CAS.document.frames(“top”)是页面上的实际元素。 要检查这一点,请打开您要编写脚本的网页,在Internet Explorer中按F12,单击工具栏中的箭头,然后单击网页中的“顶部”框架元素,切换回开发人员工具并查看该行突出显示。确保框架元素名为“top”。

  3. 尝试引用frame元素时,HTML尚未完全加载。设置较长的延迟或循环。

  4. 即。 (另):

        Do Until HtmlDoc2 Is Nothing = false
          Set HTMLDoc2 = CAS.document.frames("top").document 
        Loop
    

    也许更重要的问题是为什么手动导航到另一个页面?你不能自动化这个过程的那一部分吗?