如何参考IE.文档从另一个子在VBA



我正在尝试从Internet Explorer读取值并将其写入Excel工作表。为了保持代码整洁,我希望将代码的某些部分放在另一个过程中。我正在努力引用IE.document。

下面是一个简化的例子,说明我的功能(在这个例子中忽略了就绪状态):

Sub OpenAndWriteIn()
        Set IE = CreateObject("InternetExplorer.Application")
        With IE
            .Visible = True
            .navigate "http://www.huffingtonpost.com"
        End With
        'Write in the Values to Sheet
        ActiveSheet.Range("A1") = IE.document.getElementsByClassName("card__link")(0)
        ActiveSheet.Range("B1") = IE.document.getElementsByClassName("card__link")(1)
        MsgBox "Finished"
        IE.Quit
End Sub

这是我想要的东西,但它不工作:

Sub OpenIE()
        Set IE = CreateObject("InternetExplorer.Application")
        With IE
            .navigate "http://www.huffingtonpost.com"
        End With
        'Based on the SearchedValue make a decision
        WriteIn IE
        IE.Quit
End Sub
Sub WriteIn(IE As Object)
    ActiveSheet.Range("A1") = IE.document.getElementsByClassName("card__link")(0)
    ActiveSheet.Range("B1") = IE.document.getElementsByClassName("card__link")(1)
    MsgBox "Finished"
End Sub

尝试使用以下定义之一

Sub WriteIn(IE) or Sub WriteIn(IE as variant)

方法Sub WriteIn(IE As Object)的定义使用ByRef参数。ByRef是默认的,所以当ByRef/ByVal被省略时,ByRef被使用。在这种情况下,OpenIE()方法中IE变量的声明必须与参数声明(包括类型)匹配。简单地说,类型必须是一致的,因为ByRef形参引用了实参。

所以你可以解决这个问题,要么声明为ObjectVariant(但不能混合),要么简单地在函数Sub WriteIn(ByVal IE As Object)中使用ByVal。对于ByVal,形参保存实参的值。

最新更新